二叉树遍历--随笔

85 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情


二叉树前序遍历

使用递归来实现,前序中序后序遍历指的是根节点的遍历位置。注意递归的出口问题

二叉树前序遍历迭代方法

能够用递归的来实现的都可以用栈来实现,递归的实现也是利用了底层的执行栈。所以二叉树的前序遍历的迭代实现,是完全可以用栈的。思路如下:

  1. 先将根节点压入栈中。
  2. 进入一个while循环,如果栈不为空就继续执行循环,然后pop出一个元素。
  3. 我们将pop的元素的值,压入结果数组。然后将该元素的左右孩子压入栈中,注意:栈的规则是先进后出。前序遍历的规则是先遍历元素本身,再遍历父元素,再遍历左孩子,然后是右孩子。所以我们要将右孩子先压入栈中,在压入左孩子,这样取出来的顺序就是父->左->右。父元素的遍历和孩子节点的遍历顺序不是同一个遍历次数。
二叉树的中序遍历

中序遍历,遍历顺序就是先遍历左孩子,然后是父元素,最后是右孩子。

二叉树的中序遍历迭代方法

前提概念:

  1. 处理过程
  2. 访问过程

前序遍历的处理过程和访问过程是重叠的,前序遍历的访问顺序是先访问父元素,处理顺序也是先处理父元素,所以我们就可以直接利用栈来进行处理,而中序遍历,访问顺序是一层一层进行访问左子树,直到左子树为空,才访问父元素,也就是处理父元素。访问和处理是不一致的。所以我们可以利用一个指针来定位我们实时访问的节点,当节点的左子树为空的时候,我们就利用我们指针来处理该节点(压入result数组)。并之后开始遍历右子树(因为左子树为空,也处理完父元素了)

二叉树的后序遍历迭代方法

前序遍历的顺序是中->左->右,调整一下入栈顺序编程中->右->左,最后反转result数组顺序就变成左->右->中就是正确的顺序了。

二叉树的层序遍历

层序遍历就是一层一层的访问,并且随着访问的时候,一次处理结点。层序遍历的关键点就是:我们要分清哪些节点是一层的。层序遍历的特点可以利用队列的先进先出的模式。每遍历一层,当前的队列中的节点就都是一层的节点,我们求出当时队列的长度进行遍历,每遍历一个节点,就将左右子树加入队列中。

\