【二叉树】刷题(以递归写法为主)
发布人:shili8
发布时间:2025-03-15 16:14
阅读次数:0
**二叉树刷题**
二叉树是一种常见的数据结构,广泛应用于算法设计、计算机科学等领域。以下是关于二叉树的一些常见问题及其解决方案。
###1. 二叉树的定义和基本概念二叉树是一棵特殊的树形结构,每个结点最多有两个子结点(左孩子和右孩子)。二叉树的每个结点都有一个值,或者说是数据。二叉树的高度是从根结点到叶结点的最大路径长度。
###2. 二叉树的遍历二叉树的遍历是指按照某种顺序访问二叉树中的每个结点的一系列操作。常见的二叉树遍历有前序遍历、中序遍历和后序遍历。
#### 前序遍历前序遍历是指先访问根结点,然后再访问左孩子和右孩子。
class Node: def __init__(self, value): self.value = value self.left = None self.right = Nonedef preorder_traversal(root): if root is not None: print(root.value) # 访问根结点 preorder_traversal(root.left) # 访问左孩子 preorder_traversal(root.right) # 访问右孩子
#### 中序遍历中序遍历是指先访问左孩子,然后再访问根结点和右孩子。
def inorder_traversal(root): if root is not None: inorder_traversal(root.left) # 访问左孩子 print(root.value) # 访问根结点 inorder_traversal(root.right) # 访问右孩子
#### 后序遍历后序遍历是指先访问左孩子和右孩子,然后再访问根结点。
def postorder_traversal(root): if root is not None: postorder_traversal(root.left) # 访问左孩子 postorder_traversal(root.right) # 访问右孩子 print(root.value) # 访问根结点
###3. 二叉树的创建二叉树可以通过递归或迭代的方式创建。
#### 递归创建
def create_binary_tree(): root = Node(1) root.left = Node(2) root.right = Node(3) root.left.left = Node(4) root.left.right = Node(5) return root
#### 迭代创建
class Queue: def __init__(self): self.items = [] def enqueue(self, item): self.items.append(item) def dequeue(self): return self.items.pop(0) def create_binary_tree_iterative(): queue = Queue() root = Node(1) queue.enqueue(root) while not queue.is_empty(): node = queue.dequeue() if node is None: break node.left = Node(2) queue.enqueue(node.left) node.right = Node(3) queue.enqueue(node.right) node.left.left = Node(4) queue.enqueue(node.left.left) node.left.right = Node(5) queue.enqueue(node.left.right) return root
###4. 二叉树的查找二叉树中的查找可以通过递归或迭代的方式实现。
#### 递归查找
def find_node(root, target): if root is None or root.value == target: return root left_result = find_node(root.left, target) if left_result is not None: return left_result right_result = find_node(root.right, target) return right_result
#### 迭代查找
def find_node_iterative(root, target): queue = Queue() queue.enqueue(root) while not queue.is_empty(): node = queue.dequeue() if node is None: break if node.value == target: return node if node.left is not None: queue.enqueue(node.left) if node.right is not None: queue.enqueue(node.right) return None
###5. 二叉树的删除二叉树中的删除可以通过递归或迭代的方式实现。
#### 递归删除
def delete_node(root, target): if root is None or root.value == target: return None root.left = delete_node(root.left, target) root.right = delete_node(root.right, target) return root
#### 迭代删除
def delete_node_iterative(root, target): queue = Queue() queue.enqueue(root) while not queue.is_empty(): node = queue.dequeue() if node is None: break if node.value == target: # 删除结点的值 node.value = None if node.left is not None: queue.enqueue(node.left) if node.right is not None: queue.enqueue(node.right) return root
以上是关于二叉树的一些常见问题及其解决方案。这些代码示例和注释可以帮助你更好地理解二叉树的定义、遍历、创建、查找和删除等概念。