BiTree

二叉树

二叉树是每个节点最多有两个子树的树结构。通常子树被称作 左子树 和 右子树。二叉树常被用于实现二叉查找树。

二叉树的每个节点至多只有2棵子树(不存在度大于2的节点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2i-1结点;深度为k的二叉树至多有2k - 1个结点;对任何一棵二叉树T,如果其终端结点数为n0,度为2的节点数为n2,则n0 = n2 + 1.

                                   BinaryTree leaf.jpg

一棵深度为k,且有2- 1个结点称之为满二叉树;深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉树中序号为1至n的结点对应时,称之为完全二叉树。

与树不同,树的结点个数至少为1,而二叉树的结点个数可以为0;树中结点的最大度数没有限制,而二叉树结点的最大度数为2.树的节点无左右之分,而二叉树的结点有左右之分。

一棵深度为k,且有2k - 1个结点的二叉树,称为满二叉树。这种树的特点是每一层上的节点数都是最大节点数。

而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干结点,则此二叉树称为完全二叉树。

FullBT CompleteBT.jpg

 

 

 

二叉树的基本操作

递归算法:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <cstdlib>
 6 #include <algorithm>
 7 #define MAXSIZE 55
 8 using namespace std;
 9 
10 struct BiTree
11 {
12     char data;
13     BiTree *left, *right;
14 };
15 
16 BiTree *Create()
17 {
18     char ch;
19     scanf("%c", &ch);
20     getchar();
21     if (ch == '#')
22     {
23         return NULL;
24     }
25     else
26     {
27         BiTree *btree = (BiTree *)malloc(sizeof(BiTree));
28         if (NULL == btree)
29         {
30             return NULL;
31         }
32         btree->data = ch;
33         btree->left = Create();
34         btree->right = Create();
35         return btree;
36     }
37 }
38 
39 void Preorder(BiTree *bt)
40 {
41     if (NULL != bt)
42     {
43         printf ("%c ", bt->data);
44         Preorder(bt->left);
45         Preorder(bt->right);
46     }
47 }
48 
49 void Inorder(BiTree *bt)
50 {
51     if (NULL != bt)
52     {
53         Inorder(bt->left);
54         printf ("%c ", bt->data);
55         Inorder(bt->right);
56     }
57 }
58 
59 void Postorder(BiTree *bt)
60 {
61     if (NULL != bt)
62     {
63         Postorder(bt->left);
64         Postorder(bt->right);
65         printf ("%c ", bt->data);
66     }
67 }
68 
69 int Height(BiTree *bt)
70 {
71     int depth1, depth2;
72     if (NULL == bt)
73     {
74         return 0;
75     }
76     else
77     {
78         depth1 = Height(bt->left);
79         depth2 = Height(bt->right);
80         if (depth1 > depth2)
81         {
82             return (depth1 + 1);
83         }
84         else
85         {
86             return (depth2 + 1);
87         }
88     }
89 }
90 
91 int main()
92 {
93 
94 }
View Code

 

posted on 2014-12-31 15:37  M.D.LUFFI  阅读(459)  评论(0编辑  收藏  举报

导航