二叉树的遍历迭代实现
在上一篇文章中实现了二叉树,但是对于遍历仅仅是简单的用递归来进行了实现。在这篇文章中将给出迭代的实现版本以及分析过程。
首先给出我们要分析的二叉树实例:
前序遍历迭代版本的分析及实现:
根据上面给出的二叉树进行前序遍历的分析,很容易得到正确的遍历顺序:
A B D H I E J N O K C F G L M
回顾我们手动得到前序遍历时的想法,我将遍历的过程分为几个步骤来阐述:
1.首先得到的是根节点,而后关注根节点的左子树,而后再关注左子树根节点的左子树......直到最终的某一个节点左子树不存在,在图中第一个左子树不存在的节点为H,不难发现,我们是一直沿着左子树下行的。
2.而后我们将进行回溯,找到最后一个遍历的,且右子树存在的节点。在图中,第一个这样的节点是D。
3.接下来对步骤2中所找到的节点进行步骤1的操作。
从上述的分析可以看出针对二叉树的前序遍历无非就是针对各个左子树根节点的遍历,如下图:
对以A为根的树进行A B D H的左侧遍历,对以I为根的子树进行I(因为子树中只有一个元素)的左侧遍历,其他节点同理。针对上述逻辑我们可以抽象出一个遍历规则,如下图所示:
<