二叉树后序遍历非递归算法(C/C++语言实现)

二叉树的三种遍历递归代码很容易实现。自己写下非递归算法有助于加深理解二叉树数据结构,代码是思路的实现,在纸上画个二叉树,手工实践下后序遍历的过程。如果会写先根序和中根序的非递归代码,稍微改一下,就容易得到后序非递归代码了。

不论哪种遍历,有个共同点,就是左边始终先于右边访问。大体思路和先/中根序一样,利用一个辅助栈,暂存一些后访问节点。只不过后序相对麻烦点,不像先/中根序遍历,后两者根节点先于根的右子树访问,根节点访问之后就可以“扔掉”,后序遍历需要一直保存根节点,直到其右子树访问完,最后再访问根节点。

后序需要标记每个节点是否被访问过,可以有两种方法:可以在二叉树节点结构增加一个标志域,标记当前节点是否已经被访问,见版本1; 也可不用在每个节点增加标志域,而是用set存储每个访问过的节点,见版本2。

具体代码如下:

手工画个例子,照着代码走一遍,加深理解。

/* 二叉树节点结构 */
struct BinaryTreeNode{
    int data;
    BinaryTreeNode* lchild;
    BinaryTreeNode* rchild;
    bool ha
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值