50种遍历树的方法

本文介绍了遍历树的不同方法,包括前序、中序、后序等常见顺序,以及递归、栈、队列等实现方式。重点讨论了如何通过确定节点的优先级来实现遍历,并详细阐述了不用递归和栈队列的中序遍历策略。

推荐一首歌50ways to leave your lover

50当然是虚指,包括遍历的方法和实现的方法


常见遍历顺序:前序、中序、后序

常见实现方法:递归、栈、队列


遍历树的核心在于“遍历”,输出所有节点,并对一个节点只输出一次

换个角度,对每个节点,确定该节点相对于相连接点的优先级,优先级定了,按优先级访问,就能达到目的


递归:左节点优先、右节点优先、父节点优先,这三种是常见的。然而左中右共有6种排列

队列:从上到下遍历x左/右

不用递归与栈队列:

中序

对节点i,

初始化为根节点

** 当i.left !=null, i=i.left

i走到叶节点,输出

回溯过程

判断i与父节点关系 i==i.parent->left ? 是 输出i.parent 往右走i=i.parent->right,回到**处

否,继续上爬 i=i.parent


i=root

while(!判断为完成遍历后回溯至根)

while(i.left !=null)

i=i.left

fun(i) //左节点为空,打印节点(左空节点)

while(i==i.parent->right)

i=i.parent

if(i==i.parent->left)

fun(i.parent) //由左节点回溯至父节点,打印父节点

i=i.parent.right


判断为完成遍历后回溯至根这个分情况:root.right==null ||root.left==null回溯到根结束

否则记录回溯到根的次数>2 结束


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值