Day1 二叉树的迭代遍历

70 阅读1分钟

统一迭代遍历解决了前序(后序)遍历和中序遍历,使用迭代法时不一致的问题。

中序迭代遍历之所以和前序迭代遍历有较大的区别,就在于前序遍历每次访问和处理的节点是一致的,但是中序遍历每次访问的节点并不是要处理的节点,为了解决这一问题,同一迭代法引入了“空节点”作为标记,空节点表示这一节点已经被访问,但还没有被处理过,避免重复访问,并且随着节点不断出栈,访问到null节点,就表示其后的节点需要被处理了

时隔一年再做算法题目,发现没有第一次那么痛苦了,果然学习需要的是大量的重复

统一迭代法的思想理解之后,写起来真的很简单

  • 144.二叉树的前序遍历(opens new window)

    关键是想明白,如果想要实现前序遍历“中左右”(即出栈顺序),那么入栈的顺序应该是“右→左→中”,因为我们放入栈中的首先是root节点,所以我们应该在存入左右节点之前,把根节点弹出,最后再将根节点加入到栈中,并用null节点标记该节点已经被访问,但还没有被处理(没有添加到结果集中) image.png

  • 94.二叉树的中序遍历

    image.png
  • 145.二叉树的后序遍历

    image.png