二叉树非递归算法

方法一:模拟递归算法的操作过程。

按照先序的思想,可以转化为循环控制。

  • 入栈前,先输出本节点信息;
  • 先左子树一次入栈,直到没有左子树的结点为止;
  • 出栈栈顶元素,然后,找到右子树,继续①②操作,直到栈为空 且 结点为空。

 在遍历的过程中,进栈、出栈可能会出现栈空的情况,但这时候遍历还没有结束, 故而采用双重判断。

方法二:充分考虑先序遍历的特点

  • 1入栈。
  • 1出栈(栈顶元素出栈),输出栈顶元素1,并将1的左右孩子节点入栈;其中右孩子4先入栈,然后左孩子2入栈。(因为,对左边孩子的访问先序遍历先于右孩子,后入栈的先访问)。
  • 2出栈(栈顶元素出栈),输出栈顶元素2,并将2的左右孩子节点入栈,同理5先入栈,3后入栈。
  • 3出栈(栈顶元素出栈),输出栈顶元素3,3为叶子结点,无孩子,本次无入栈。
  • 5出栈(栈顶元素出栈),输出栈顶元素5
  • 4出栈(最后的栈顶元素出栈),此时 栈空,遍历完毕。

 

 

 

posted @ 2022-08-10 16:43  peanut321  阅读(46)  评论(0编辑  收藏  举报