二叉树的非递归遍历

匿名 (未验证) 提交于 2019-12-03 00:30:01

把栈中的每一个节点都当作是一棵完整的二叉树,每次pop出一个节点,访问,然后把右左两棵子树入栈。

把栈中的每一个节点当作是只有右子树的二叉树,这就需要每次入栈时处理好它的左子树,一路向左把所有的节点入栈,然后出栈,访问,然后把这个节点的右子树当作是二叉树按同样的方法处理(一路向左)

后序遍历的关键就在于如何判断一个节点是应该遍历它的两棵子树还是它自己,
后序遍历有这样的特点:

  1. 如果有右子树,那么它的右孩子一定正好在它之前
  2. else 如果有左子树,那么它的左孩子一定正好在它之前
  3. 如果左右子树都没有那么说明它可以直接访问

所以我们在便利过程中设置一个变量保存刚刚遍历过的节点,然后根据上面的性质就可以判断是该访问栈顶元素还是它的两棵子树了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!