简述Java如何二叉树的所有路径(先序遍历) ?
参考答案:
在Java中,要获取二叉树的所有路径(按先序遍历),我们可以使用深度优先搜索(DFS)的策略。以下是一个简单的实现步骤:
首先,我们需要定义二叉树的节点结构。通常,二叉树的节点包括一个数据元素和两个子节点(左子节点和右子节点)。以下是二叉树节点的简单定义:
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
接下来,我们可以使用递归来实现先序遍历。先序遍历的顺序是:根节点 -> 左子树 -> 右子树。我们需要维护一个列表来保存路径,并且在遍历过程中,当遇到叶子节点时,就将当前路径添加到结果列表中。
import java.util.ArrayList;
import java.util.List;
public class Solution {
public List<List<Integer>> binaryTreePaths(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if (root == null) {
return result;
}
List<Integer> path = new ArrayList<>();
dfs(root, path, result);
return result;
}
private void dfs(TreeNode node, List<Integer> path, List<List<Integer>> result) {
path.add(node.val);
if (node.left == null && node.right == null) {
// 如果当前节点是叶子节点,则将路径添加到结果列表中
result.add(new ArrayList<>(path));
}
// 递归遍历左子树和右子树
if (node.left != null) {
dfs(node.left, path, result);
}
if (node.right != null) {
dfs(node.right, path, result);
}
// 回溯,移除当前节点
path.remove(path.size() - 1);
}
}
以上代码定义了一个binaryTreePaths
方法,它接收一个二叉树的根节点作为输入,并返回一个列表,其中每个元素也是一个列表,代表从根节点到叶子节点的一条路径。
在dfs
方法中,我们首先将当前节点的值添加到路径中,然后检查当前节点是否是叶子节点。如果是,我们就将路径添加到结果列表中。然后,我们递归地遍历左子树和右子树。最后,在递归返回之前,我们需要从路径中移除当前节点,以实现回溯。