二叉树遍历方式有几种
二叉树是一种非常常见而且重要的数据结构。在实际应用中,我们经常会对二叉树进行遍历,并对其中的节点进行操作。那么,对于一个二叉树来说,有几种遍历方式呢?本文将从多个角度进行分析。
一、定义
二叉树遍历是指按照某种约定的方式,对二叉树中的所有节点进行访问且仅访问一次的过程。遍历是二叉树上最基本的操作之一,也是进行二叉树问题求解的基础。常见的二叉树遍历方式有前序遍历、中序遍历、后序遍历和层次遍历。
二、前序遍历
前序遍历,也就是从二叉树的根节点开始,按照先左后右的顺序访问每个节点。在二叉树的前序遍历中,每个节点会被访问三次:第一次是在进入该节点时访问,第二次是在访问完该节点的左子树后,第三次是在访问完该节点的右子树后。
前序遍历的代码实现如下:
```python
def preorderTraversal(root):
res = []
def helper(root):
if not root: return
res.append(root.val)
helper(root.left)
helper(root.right)
helper(root)
return res
```
三、中序遍历
中序遍历,也就是按照从左到右的顺序访问二叉树的每个节点。在二叉树的中序遍历中,每个节点会被访问两次:第一次是在进入该节点时,第二次是在访问了该节点的左右子树后。
中序遍历的代码实现如下:
```python
def inorderTraversal(root):
res = []
def helper(root):
if not root: return
helper(root.left)
res.append(root.val)
helper(root.right)
helper(root)
return res
```
四、后序遍历
后序遍历,也就是按照从左到右的顺序访问二叉树的每个节点,并在最后访问根节点。在二叉树的后序遍历中,每个节点会被访问三次:第一次是在进入该节点时,第二次是在访问完了该节点的左右子树后,第三次是在访问该节点时。
后序遍历的代码实现如下:
```python
def postorderTraversal(root):
res = []
def helper(root):
if not root: return
helper(root.left)
helper(root.right)
res.append(root.val)
helper(root)
return res
```
五、层次遍历
层次遍历,也就是按照从上到下、从左到右的顺序遍历每个节点,一般情况下使用队列实现。在二叉树的层次遍历中,每个节点只会被访问一次。
层次遍历的代码实现如下:
```python
def levelOrder(root):
if not root: return []
res, queue = [], [root]
while queue:
level = []
for i in range(len(queue)):
node = queue.pop(0)
level.append(node.val)
if node.left: queue.append(node.left)
if node.right: queue.append(node.right)
res.append(level)
return res
```
六、分析
不同的二叉树遍历方式在应用中有着各自独特的作用。前序遍历可以用来复制一棵二叉树,并且在二叉查找树中进行先序遍历可以得到递增的排序序列。中序遍历在二叉查找树中也可以得到排序序列。后序遍历可以用来计算一个二叉树的深度、计算一个二叉树的直径等问题。层次遍历常用于二叉树的层级分析。