二叉树的常见操作

【输出二叉树中的叶子结点】

无论前序、中序、后序遍历,叶子结点的输出顺序都是一样的吗??都是一样的,输出顺序为:从树的左边到右边叶子!!在二叉树的遍历算法中增加检测结点的“左右子树是否都为空”。

 1 void PreOrderPrintLeaves(BinTree Bt)
 2 {
 3     if(Bt)
 4     {
 5         if(Bt->Left == NULL && Bt->Right == NULL)
 6             printf("%c ", Bt->Data);
 7         PreOrderPrintLeaves(Bt->Left);
 8         PreOrderPrintLeaves(Bt->Right);
 9     }
10 }
11 
12 void InOrderPrintLeaves(BinTree Bt)
13 {
14     if(Bt)
15     {
16         InOrderPrintLeaves(Bt->Left);
17         if(Bt->Left == NULL && Bt->Right == NULL)
18             printf("%c ", Bt->Data);
19         InOrderPrintLeaves(Bt->Right);
20     }
21 }
22 
23 void PostOrderPrintLeaves(BinTree Bt)
24 {
25     if(Bt)
26     {
27         PostOrderPrintLeaves(Bt->Left);
28         PostOrderPrintLeaves(Bt->Right);
29         if(Bt->Left == NULL && Bt->Right == NULL)
30             printf("%c ", Bt->Data);
31     }
32 }

【求二叉树的叶子结点数】

1 int BinTreeGetLeaves(BinTree Bt)
2 {
3     if(Bt == NULL)
4         return 0;
5     if(Bt->Left == NULL && Bt->Right == NULL)
6         return 1;
7     else
8         return BinTreeGetLeaves(Bt->Left) + BinTreeGetLeaves(Bt->Right);
9 }

 

【求二叉树的高度】

 

 1 int PostOrderGetHeight(BinTree Bt)
 2 {
 3     int HL, HR, MaxH;
 4 
 5     if(Bt)
 6     {
 7         HL = PostOrderGetHeight(Bt->Left);
 8         HR = PostOrderGetHeight(Bt->Right);
 9         MaxH = (HL > HR) ? HL : HR;
10         return (MaxH + 1);
11     }
12     else
13     {
14         return 0;
15     }
16 }

 

【由两种遍历序列确定二叉树】

 已知三种遍历中的任意两种遍历序列,能否唯一确定一棵二叉树呢??必须要有中序遍历才行!!

1、先序和中序遍历序列来确定一棵二叉树??

  • 根据先序遍历序列第一个结点确定根结点
  • 根据根结点中序遍历序列中分割左右两个子序列
  • 左子树右子树分别递归使用相同的方式继续分解;

2、后序和中序遍历序列来确定一棵二叉树??

  • 根据后序遍历序列最后一个结点确定根结点
  • 根据根结点中序遍历序列中分割左右两个子序列
  • 左子树右子树分别递归使用相同的方式继续分解;

 

转载于:https://www.cnblogs.com/utank/p/4272409.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值