跳到主要内容

简述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方法中,我们首先将当前节点的值添加到路径中,然后检查当前节点是否是叶子节点。如果是,我们就将路径添加到结果列表中。然后,我们递归地遍历左子树和右子树。最后,在递归返回之前,我们需要从路径中移除当前节点,以实现回溯。