【数据结构】-树-后序遍历详述-前中后序遍历中栈的规律

本文详细介绍了二叉树后序遍历的非递归实现,通过节点的isfirst标记和上一个访问节点的指针判断遍历状态。同时,文章还探讨了后序遍历中栈的特性,即访问节点时,栈中的元素是该节点的所有祖先,并解释了这一性质在求路径和最近祖先节点问题上的应用。此外,文章还对比了先序和中序遍历中栈的不同作用。

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

1.访问完b的左子树后,回到b,此时不能访问b

2.访问完b的右子树后,回到b,此时访问b,访问完b之后,将b归空,只要b被访问,说明它的左右子树已经访问结束,不需要再用了。如果没有右子树,直接访问b。

那么,如何判断上面两种情况?

第一:每个节点添加isfirst标记,初始化为true,表示第一次出现在栈顶,也就是第一种情况,此时需要获取右子,而不是访问。

第二:添加一个指针指向上一个访问的节点。如果右子等于上一个访问的节点,或者右子为空,那么直接访问b,否则,右子入栈。

三种非递归方式都有下面这个模板,要牢牢把握

while ( !s.empty()||p != NULL )
    {
        if (p)
        {
 &nbs

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vector<>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值