二叉树的前序遍历问题描述
提供二叉树的根节点 root ,返回它节点值的 前序 遍历。
二叉树的前序遍历是一种深度优先遍历(DFS)的方式,其遍历顺序为:先访问根节点,然后递归地对左子树进行前序遍历,最后递归地对右子树进行前序遍历。
二叉树的定义
在Java中,二叉树的定义可以通过一个类表示。以下是一个简单的二叉树节点类的定义:
public class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int val) {this.val = val;}
}
使用这个定义,可以构建任意形状的二叉树,例如:
/** 示例二叉树:* 1* / \* 2 3* / \* 4 5*/
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
这样,通过创建不同的TreeNode
实例,并连接它们的left
和right
引用,可以构建出具体的二叉树结构。
前序遍历的过程
前序遍历的过程是递归的。假设我们有一个二叉树:
1/ \2 3/ \4 5
前序遍历的顺序是:1 -> 2 -> 4 -> 5 -> 3
具体步骤如下:
访问根节点: 从根节点开始,首先访问根节点的值。
递归遍历左子树: 对根节点的左子树进行前序遍历,重复步骤1。
递归遍历右子树: 对根节点的右子树进行前序遍历,重复步骤1。
整个遍历的顺序是根节点 -> 左子树 -> 右子树。这个过程是递归的,因为对左子树和右子树的遍历过程本质上也是一个前序遍历。
前序遍历的代码实现
import java.util.ArrayList;
import java.util.List;public class BinaryTreePreorderTraversal {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();preorder(root, result);return result;}private void preorder(TreeNode node, List<Integer> result) {if (node == null) {return;}// 1. 访问根节点result.add(node.val);// 2. 递归左子树preorder(node.left, result);// 3. 递归右子树preorder(node.right, result);}// 示例public static void main(String[] args) {/** 示例二叉树:* 1* / \* 2 3* / \* 4 5*/TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(3);root.left.left = new TreeNode(4);root.left.right = new TreeNode(5);BinaryTreePreorderTraversal solution = new BinaryTreePreorderTraversal();List<Integer> result = solution.preorderTraversal(root);System.out.println(result); // 输出: [1, 2, 4, 5, 3]}
}