二叉树

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <windows.h>
 4 #define MaxChild 10
 5 typedef char ElemType;
 6 typedef struct BiTNode
 7 {
 8    ElemType data;                   //节点的数据域 
 9    struct BiTNode *lchild,*rchild;  //左右指针 
10 }*BiTree;
11 
12 void visit(ElemType c,int level)    //访问二叉树节点,输出包含字符'D'的节点位于二叉树的层数 
13 {
14    if(c=='D')
15       printf("%c is at %d lever of BiTree\n",c,level);   
16 }
17 
18 void PreOrderTraverse(BiTree T,int level)          //先序遍历 
19 {
20    if(T)
21       {
22          visit(T->data,level);               //访问根节点 
23          PreOrderTraverse(T->lchild,level+1);  //先序遍历T的左子树 
24          PreOrderTraverse(T->rchild,level+1);  //先序遍历T的右子树 
25       }   
26 }
27 
28 void InOrderTraverse(BiTree T,int level)          //中序遍历 
29 {
30    if(T)
31       {
32          InOrderTraverse(T->lchild,level+1);
33          visit(T->data,level);
34          InOrderTraverse(T->rchild,level+1);
35       }   
36 }
37 
38 void PosOrderTraverse(BiTree T,int level)          //后序遍历 
39 {
40    if(T)
41       {
42          PosOrderTraverse(T->lchild,level+1);
43          PosOrderTraverse(T->rchild,level+1);
44          visit(T->data,level);  
45       }   
46 }
47 
48 void CreatBiTree(BiTree *T)            //先序序列创建一个二叉树 
49 {
50    ElemType c;
51    scanf("%c",&c);
52    if(c==' ')  *T=NULL;
53    else
54       {
55          *T=(BiTNode*)malloc(sizeof(BiTNode));  //创建根节点 
56          (*T)->data=c;                          //向根节点输入数据 
57          CreatBiTree(&((*T)->lchild));          //递归创建左子树 
58          CreatBiTree(&((*T)->rchild));          //递归创建右子树 
59       }    
60 }
61 
62 int main()
63 {
64    int level=1;
65    BiTree T=NULL;
66    CreatBiTree(&T);
67    PreOrderTraverse(T,level);
68    system("pause");
69    return 0;   
70 }

 

posted @ 2013-06-11 23:05  瓶哥  Views(555)  Comments(0Edit  收藏  举报