
一、二叉树的前序遍历
1. 递归写法
前序遍历的规则是'根节点 → 左子树 → 右子树',即先访问当前节点的值,再递归遍历左子树,最后递归遍历右子树。代码通过递归方式遵循这一规则,将遍历结果按顺序存储在列表中并返回。
核心逻辑如下:
- 初始化存储结构:定义一个列表用于按顺序存储前序遍历的节点值。
- 递归遍历函数:
- 终止条件:若当前节点为空,则直接返回。
- 访问当前节点:若节点非空,将其值加入列表。
- 递归左子树:调用递归函数处理左子树。
- 递归右子树:最后处理右子树。
- 启动遍历:以根节点为起点触发整个树的遍历,最终返回存储结果的列表。
对于一棵简单二叉树,遍历过程为:访问根节点 → 递归右子树(左子树为空)→ 递归节点 2 的左子树。所有节点遍历完成,返回符合前序遍历规则的序列。通过递归自然贴合前序遍历的定义,代码简洁且易于理解,时间复杂度为 O(n),空间复杂度为 O(n)。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
private List<Integer> list = new ArrayList<>();
public List<Integer> preorderTraversal(TreeNode root) {
find(root);
return list;
}
private void find(TreeNode node) {
if (node != null) {
list.add(node.val);
find(node.left);
find(node.right);
}
}
}
2. 迭代写法
采用迭代法借助栈来模拟递归过程。前序遍历的规则是'根节点 → 左子树 → 右子树'。利用栈'先进后出'的特性,确保访问顺序符合前序规则:先访问当前节点,再优先处理左子树(后入栈),最后处理右子树(先入栈)。
步骤拆解:
- 初始化:定义列表存储结果。若根节点为空,直接返回空列表。定义栈并将根节点入栈。


