二叉树的建立和三种遍历

 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

转载于:https://www.cnblogs.com/OneL1fe/p/6531520.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值