二叉树的遍历详解:前、中、后、层次遍历(Python实现)
二叉树是一种常见的数据结构,而它的常见遍历方法有前序遍历、中序遍历、后续遍历、层次遍历——掌握这几种遍历方法是很有必要的。
假设我们二叉树节点的定义如下——
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
前序遍历
1. 深度优先遍历(递归实现)
我们先看前序遍历二叉树的过程——
访问根结点
前序遍历左子树
前序遍历右子树
很容易就可以看出这个过程是递归的,所以可以很方便使用递归实现前序遍历。
def preorderTraversal(root: TreeNode) -> List[int]:
res = []
dfs(root, res)
return res
def dfs(root: TreeNode, res: List[int]) -> None:
if not root: return
res.append(root.val)
dfs(root.left, res)
dfs(root.right, res)
python 特色的二叉树前序遍历递归实现
def preorderTraversal(root: TreeNode) -> List[int]:
if not root: return []
return [root.val] + preorderTraversal(root.left) + preorderTraversal(root.right)
2.深度优先遍历(迭代实现)
由于递归是隐式的使用了栈(函数栈),所以也可以直接使用栈来实现递归。
def preorderTraversal(root: TreeNode) -> List[int]:
if root is None: return []
res, stack = [], [root]
while stack:
node = stack.pop()
if not node: continue
res.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return res
3.(颜色)标记法
核心思想如下:
使用标记记录节点的状态,