二叉树
二叉树是计算机科学中的基础数据结构,用于表示具有层级关系的数据。本文将向您展示如何使用 Python 对二叉树进行各种遍历。
1. 基础知识
二叉树遍历方法:
前序遍历:先访问根节点,再前序遍历左子树,最后前序遍历右子树。
中序遍历:先中序遍历左子树,再访问根节点,最后中序遍历右子树。
后序遍历:先后序遍历左子树,再后序遍历右子树,最后访问根节点。
注意点:
遍历的命名是基于访问根节点的顺序。
左子树总是优先于右子树
2. 代码实现
首先,我们需要定义一个二叉树节点的数据结构:
class TreeNode : def __init__ (self, val=0 , left=None , right=None ): self.val = val self.left = left self.right = right
1. 前序遍历
递归实现:
def preorderTraversal_recursive (root ): if not root: return print (root.val) preorderTraversal_recursive(root.left) preorderTraversal_recursive(root.right)
2. 中序遍历 (非递归)
非递归实现:
def preorderTraversal (root ): if not root: return [] result = [] stack = [] while root or stack: while root: result.append(root.val) stack.append(root) root = root.left root = stack.pop() root = root.right return result
3. 后序遍历 (非递归)
def postorderTraversal (root ): if not root: return [] result, stack, lastVisit = [], [], None while stack or root: while root: stack.append(root) root = root.left node = stack[-1 ] if not node.right or node.right == lastVisit: result.append(node.val) lastVisit = stack.pop() else : root = node.right return result
4. DFS深度优先搜索 - 从上到下
def dfs_preorder (root ): result = [] dfs_helper(root, result) return result def dfs_helper (root, result ): if not root: return result.append(root.val) dfs_helper(root.left, result) dfs_helper(root.right, result)
5. DFS深度优先搜索 - 分治法 (从下向上)
def divide_and_conquer (root ): if not root: return [] left = divide_and_conquer(root.left) right = divide_and_conquer(root.right) return [root.val] + left + right
6. BFS层次遍历
def levelOrder (root ): result, queue = [], [root] while queue: level, size = [], len (queue) for i in range (size): node = queue.pop(0 ) if node: level.append(node.val) queue.append(node.left) queue.append(node.right) if level: result.append(level) return result
3. 总结
二叉树的遍历是算法和数据结构的基础,掌握它们对于解决实际问题至关重要。