推荐一首歌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 结束
本文介绍了遍历树的不同方法,包括前序、中序、后序等常见顺序,以及递归、栈、队列等实现方式。重点讨论了如何通过确定节点的优先级来实现遍历,并详细阐述了不用递归和栈队列的中序遍历策略。
1万+

被折叠的 条评论
为什么被折叠?



