用非递归的方式实现二叉树遍历

先序遍历

思路

遍历顺序为根、左、右

1.如果根节点非空,将根节点加入到栈中。

2.如果栈不空,弹出出栈顶节点,将其值加加入到数组中。

   如果该节点的右子树不为空,将右子节点加入栈中。

   如果左子节点不为空,将左子节点加入栈中。

3. 重复第二步,直到栈空。

代码实现



中序遍历

思路

遍历顺序为左、根、右

1.如果根节点非空,将根节点加入到栈中。

2.如果栈不空,取栈顶元素(暂时不弹出),

  如果左子树已访问过,或者左子树为空,则弹出栈顶节点,将其值加入数组,如有右子树,将右子节点加入栈中。

  如果左子树不为空,则将左子节点加入栈中。

3.重复第二步,直到栈空。

代码实现



后序遍历

思路

遍历顺序为左、右、根

1.如果根节点非空,将根节点加入到栈中。

2.如果栈不空,取栈顶元素(暂时不弹出),

   如果(左子树已访问过或者左子树为空),且(右子树已访问过或右子树为空),则弹出栈顶节点,将其值加入数组,

   如果左子树不为空,切未访问过,则将左子节点加入栈中,并标左子树已访问过。

   如果右子树不为空,切未访问过,则将右子节点加入栈中,并标右子树已访问过。

3.重复第二步,直到栈空。

代码实现


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容