50种遍历树的方法

来源:互联网 发布:阴茎 身高 知乎 编辑:程序博客网 时间:2024/05/30 21:58

推荐一首歌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 结束


0 0
原创粉丝点击