二叉树的先序,中序,后序遍历代码
二叉树是计算机科学中的一种数据结构,它是由一系列的节点组成,每个节点都有零个或者多个子节点,每个子节点最多只能有两个,分别称为左子节点和右子节点。在二叉树中,从根节点开始,按照一定的顺序遍历整个树,可以得到不同的遍历结果。其中,先序遍历、中序遍历、后序遍历是最基本的三种方式,本文将分别从不同的角度来介绍这三种遍历的代码实现。
从代码实现的角度来看,先序遍历、中序遍历、后序遍历递归的代码实现方式很容易理解。先序遍历是从左子节点到右子节点,中序遍历是先遍历左子节点,再遍历自己,最后遍历右子节点,后序遍历是先遍历左子节点,再遍历右子节点,最后遍历自己。以下是三种遍历的代码实现:
先序遍历的代码实现:
```python
def preorderTraversal(root):
if not root:
return []
res = []
res.append(root.val)
res += preorderTraversal(root.left)
res += preorderTraversal(root.right)
return res
```
中序遍历的代码实现:
```python
def inorderTraversal(root):
if not root:
return []
res = []
res += inorderTraversal(root.left)
res.append(root.val)
res += inorderTraversal(root.right)
return res
```
后序遍历的代码实现:
```python
def postorderTraversal(root):
if not root:
return []
res = []
res += postorderTraversal(root.left)
res += postorderTraversal(root.right)
res.append(root.val)
return res
```
从遍历顺序的角度来看,三种遍历的顺序是不同的。先序遍历是从根节点开始,先遍历自己,再遍历左子节点,最后遍历右子节点。中序遍历是从根节点开始,先遍历左子节点,再遍历自己,最后遍历右子节点。后序遍历是从根节点开始,先遍历左子节点,再遍历右子节点,最后遍历自己。这三种遍历的递归实现相对简单,但是迭代实现较为复杂。
从应用场景的角度来看,先序遍历、中序遍历、后序遍历各有不同的应用场景。先序遍历可以用来复制一棵树,或者用以创建一个完全二叉树,在O(N)的时间内使用先序遍历解决这类问题。中序遍历可以用来寻找二叉树中离当前节点最近的一个前驱节点(即中序遍历序列中当前节点前面的那个节点),后序遍历可以用来计算二叉树的高度、深度、直径等性质。
总之,先序遍历、中序遍历、后序遍历是二叉树最基本的遍历方式,它们有着不同的代码实现方式、遍历顺序和应用场景。对于每一种遍历方式,我们需要理解其背后的原理及其实际应用,这样我们才能更好地运用遍历方式解决实际问题。