遍历二叉树的应用

本文深入探讨了二叉树的基本算法,包括叶节点输出、树深度计算、表达式遍历及树结构确定方法。通过具体实例,阐述了先序、中序及后序遍历的应用,以及如何结合遍历结果重建二叉树。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题一.输出二叉树中的叶节点(左右子都为空)
只需在遍历过程中增加一个if语句判断是否为空即可。

void preorderprintleaves(Bintree BT)
{
    if(BT){
        if(!BT->Left&&!BT->Right)
            printf("%d",BT->Data);
        preorderprintleaves(BT->Left);
        preorderprintleaves(BT->Right);
    }
}

问题二.求二叉树的深度
求出左子树和右子树的值取最大即可。

int postordergetheight(bintree BT)
{
    int HL,HR,MAXH=0;
    if(BT){
        HL=postordergetheight(BT->Left);
        HR=postordergetheight(BT->Right);
        MAXH=(HL>HR)?HL:HR;
        return (MAXH+1);
    }
    else return 0;     //空树的深度为0.
}

问题三.二元表达式及其遍历
二叉树的根节点为运算符号,叶节点为数字,将其进行先序遍历可得到运算式的前缀表达式,同理,中序遍历以及后序遍历也可得到中缀表达式和后缀表达式,但中缀表达式受到运算优先级的影响,所以中缀表达式是不一定准确的。

问题四.根据遍历确定二叉树。
只根据两次遍历确定一个树,则必须要有一个中序遍历。
例:根据先序遍历和中序遍历确定一棵二叉树。
1 首先,根据先序遍历结果中的首个元素即为根节点。
2 在中序遍历结果中找到该元素,将其分成两个左右子序列
3 在对分成的两个左右子序列进行递归操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值