统一迭代遍历解决了前序(后序)遍历和中序遍历,使用迭代法时不一致的问题。
中序迭代遍历之所以和前序迭代遍历有较大的区别,就在于前序遍历每次访问和处理的节点是一致的,但是中序遍历每次访问的节点并不是要处理的节点,为了解决这一问题,同一迭代法引入了“空节点”作为标记,空节点表示这一节点已经被访问,但还没有被处理过,避免重复访问,并且随着节点不断出栈,访问到null节点,就表示其后的节点需要被处理了
时隔一年再做算法题目,发现没有第一次那么痛苦了,果然学习需要的是大量的重复
统一迭代法的思想理解之后,写起来真的很简单
-
144.二叉树的前序遍历(opens new window)
关键是想明白,如果想要实现前序遍历“中左右”(即出栈顺序),那么入栈的顺序应该是“右→左→中”,因为我们放入栈中的首先是root节点,所以我们应该在存入左右节点之前,把根节点弹出,最后再将根节点加入到栈中,并用null节点标记该节点已经被访问,但还没有被处理(没有添加到结果集中)
-
-