先序遍历非递归算法_二叉树的非递归遍历图解(多种角度)

非递归前序

法一(技巧)

  • 非递归的前序。我们利用栈的性质替代递归,因为递归有时候在效率方面不是令人满意的。
  • 利用栈,我们直到栈的顺序为现金先出。那么顺序如何添加?递归是左递归,右递归。但是利用栈要相反,因为如果左进栈、右进栈会出现以下后果:
a173c9c2d2e4f39c8459971a4ca4bea1.png
  • 所以,我们要利用递归的思路,需要先放右节点进栈,再放左节点进栈,这个下次·再取节点取到左节点·,这个节点再右节点进栈,左节点进栈。然后循环一直到最后会一直优先取到左节点。达到和递归顺序相仿效果。
19c7eac7e3550f1763aaa508d497a181.png
  • 每pop完添加右左节点直接输出(访问)即可完成前序非递归遍历。

public void qianxu3(node t)// 非递归前序 栈 先左后右 t一般为root

{

Stack q1 = new Stack();

if (t == null)

return;

if (t != null) {

q1.push(t);

}

while (!q1.empty()) {

node t1 = q1.pop();

if (t1.right != null) {

q1.push(t1.right);

}

if (t1.left != null) {

q1.push(t1.left);

}

System.out.print(t1.value + " ");

}

}

法二(传统)

方法二和非递归中序遍历的方法类似,只不过需要修改输出时间,在进栈时候输入访问节点即可。具体参考中序遍历分析

public vo

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值