提供二叉树的根节点?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]
}
}