浙江大学数据结构(3.3.4二叉树的应用)

[例]遍历二叉树额应用:输出二叉树中的叶子结点。

  • 在二叉树的遍历算法中增加检测结点的“左右子树是否都为空”
void PreOrderPrintLeaves(BinTree BT)
{
    if (BT)
       {
           if (!BT->left && !BT->right)
              printf("%d",BT->Data);
           PreOrderPrintLeaves(BT);
           PreOrderPrintLeaves(BT);

       }

 

[例]求二叉树的高度

  • Height=max(HL,HR)+1
int PostOrderGetHeight(BinTree BT)
{
    int HL,HR,MAXH;
    if (BT)
    {
     HL=PostOrderGetHeight(BT->Left);
     HR=PostOrderGetHeight(BT->right);
     MAXH=(HL>HR)?HL:HR;
     return (MAXH+1);
    }
    else return 0;
}

[例]二元运算表达式树及其遍历

  • 叶结点是运算数
  • 其余结点均为运算符

  • 三种遍历可以得到三种不同的访问结果
  1. 先序遍历得到前缀表达式:++a*bc*+*defg
  2. 中序遍历得到中缀表达式:a+b*c+d*e+f*g
  3. 后续遍历得到后缀表达式:abc*+de*+fg*+

[例]由两种遍历序列确定二叉树

已知三种遍历中的任意两种遍历序列,能否唯一确定一棵二叉树呢?

  • 答案是:必须要有中序遍历才行!
  • 没有中序的困扰:
  1. 先序遍历序列:A B
  2. 后序遍历序列:B A
  • 先序和中序遍历序列来确定一棵二叉树

      【分析】

  1. 根据先序遍历序列第一个结点确定根结点
  2. 根据根结点在中序遍历序列中分割在左右两个子序列
  3. 对左子树和右子树分别分别递归使用相同的方法继续分解
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值