二叉树中序遍历递归算法
时间: 2025-05-30 13:05:17 浏览: 14
### 二叉树中序遍历递归算法实现
二叉树的中序遍历是一种经典的树遍历方式,按照“左-根-右”的顺序依次访问节点。递归算法通过函数调用栈来模拟这一过程,其实现逻辑简单明了。
以下是基于 Java 和 Python 的二叉树中序遍历递归算法实现:
#### Java 版本
```java
import java.util.ArrayList;
import java.util.List;
class TreeNode {
int val;
TreeNode left, right;
TreeNode(int x) {
val = x;
}
}
public class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
inorder(root, result);
return result;
}
private void inorder(TreeNode node, List<Integer> result) {
if (node == null) return; // 如果当前节点为空,则返回
inorder(node.left, result); // 遍历左子树
result.add(node.val); // 处理当前节点(加入结果列表)
inorder(node.right, result); // 遍历右子树
}
}
```
此代码实现了中序遍历的核心逻辑:先递归遍历左子树,再处理当前节点,最后递归遍历右子树[^2]。
---
#### Python 版本
```python
# 定义二叉树节点类
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def inorder_traversal(root):
result = []
def dfs(node): # 使用内部函数进行递归操作
if not node: # 基础情况:如果节点为空则直接返回
return
dfs(node.left) # 左子树递归
result.append(node.val) # 当前节点值存入结果
dfs(node.right) # 右子树递归
dfs(root) # 调用递归函数
return result # 返回最终结果
```
Python 实现同样遵循“左-根-右”的原则,利用递归来简化控制流程[^3]。
---
### 关键点解析
1. **递归终止条件**
在每次递归调用之前,都需要判断当前节点是否为空。如果是空节点,则直接返回,不再继续递归。
2. **访问顺序**
中序遍历严格按“左-根-右”的顺序执行。对于每一个节点,优先递归其左子树,接着处理当前节点本身,最后递归右子树。
3. **时间复杂度与空间复杂度**
时间复杂度为 \(O(n)\),其中 \(n\) 是二叉树中的节点总数,因为每个节点都会被访问一次且仅一次。空间复杂度取决于递归深度,最坏情况下为 \(O(h)\),\(h\) 表示树的高度[^1]。
---
阅读全文