二叉树的建立和三种遍历

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <assert.h>
 4 #include <string.h>
 5 typedef struct tree{
 6     int data;
 7     struct tree *pLeft;
 8     struct tree *pRight;
 9 }*pT,T;
10 pT CreateTree(){
11     int data=0;
12     pT p=NULL;
13     puts("请输入要插入的数据:");
14     scanf("%d",&data);
15     if(data==0)
16         return NULL;
17     p=(pT)malloc(sizeof(T));
18     p->data=data;
19     printf("输入%d 的左节点值:",data);
20     p->pLeft=CreateTree();
21     printf("输入%d 的右节点值:",data);
22     p->pRight=CreateTree();
23     return p;
24 }
25 void PreOrder(pT root){
26     if(root==NULL)
27         return;
28     printf("%d\t",root->data);//访问根
29     PreOrder(root->pLeft);//访问左子树
30     PreOrder(root->pRight);//访问右子树
31 }
32 void InOrder(pT root){
33     if(root==NULL)
34         return;
35     if(root->pLeft!=NULL)
36         InOrder(root->pLeft);//访问左子树
37     printf("%d\t",root->data);//访问根
38     if(root->pRight!=NULL)
39         InOrder(root->pRight);//访问右子树    
40 }
41 void PostOrder(pT root){
42     if(root==NULL)
43         return;
44     if(root->pLeft!=NULL)
45         PostOrder(root->pLeft);
46     if(root->pRight!=NULL)
47         PostOrder(root->pRight);
48     printf("%d\t",root->data);
49 }
50 int main(){
51     pT root;
52     root=CreateTree();
53     PreOrder(root);
54     putchar('\n');
55     InOrder(root);
56     putchar('\n');
57     PostOrder(root);
58     return 0;
59 }

输入:

1
2
4
0
7
0
0
5
0
0
3
0
6
0
0

输出:

请输入要插入的数据:
输入1 的左节点值:请输入要插入的数据:
输入2 的左节点值:请输入要插入的数据:
输入4 的左节点值:请输入要插入的数据:
输入4 的右节点值:请输入要插入的数据:
输入7 的左节点值:请输入要插入的数据:
输入7 的右节点值:请输入要插入的数据:
输入2 的右节点值:请输入要插入的数据:
输入5 的左节点值:请输入要插入的数据:
输入5 的右节点值:请输入要插入的数据:
输入1 的右节点值:请输入要插入的数据:
输入3 的左节点值:请输入要插入的数据:
输入3 的右节点值:请输入要插入的数据:
输入6 的左节点值:请输入要插入的数据:
输入6 的右节点值:请输入要插入的数据:
1	2	4	7	5	3	6	
4	7	2	5	1	3	6	
7	4	5	2	6	3	1	

通过测试:

http://ideone.com/Qo2djs
posted @ 2017-03-10 16:55  夜梦多离殇  阅读(172)  评论(0编辑  收藏  举报