Q:给定一个仅包含数字0-9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。
例如根节点到叶子节点的一条路径是1->2->3,那么这条路径就用123来代替。
找出根节点到叶子节点的所有路径表示的数字之和
例如:
1↵ / ↵ 2 3
根节点到叶子节点的路径1->2用数字12代替
根节点到叶子节点的路径1->3用数字13代替
所以答案为12+13=25

A:牵扯到树的一般就是递归。

    public static int sumNumbers(TreeNode root) {
        ArrayList<Integer> array = new ArrayList<>();
        if (root == null)
            return 0;
        int sum = root.val;
        if(root.left == null && root.right == null)//如果只有一个根节点
            array.add(sum);
        //如果根节点没有左右子树,就不是路径了
        if (root.left != null)
            dfs(array, sum, root.left);
        if (root.right != null)
            dfs(array, sum, root.right);
        int count = 0;
        for (Integer integer : array) {
            count += integer;
        }
        return count;
    }

    public static void dfs(ArrayList<Integer> array, int sum, TreeNode root) {
        if (root.left == null && root.right == null) {
            sum = sum * 10 + root.val;
            array.add(sum);
            return;
        }
        int temp = sum;//这里是避免在dfs left时改变sum
        if (root.left != null) {
            sum = sum * 10 + root.val;
            dfs(array, sum, root.left);
        }
        if (root.right != null) {
            temp = temp * 10 + root.val;
            dfs(array, temp, root.right);
        }
    }

相关文章:

  • 2021-06-13
  • 2022-02-26
  • 2021-06-24
  • 2022-12-23
  • 2021-08-02
  • 2021-12-04
  • 2022-01-04
猜你喜欢
  • 2021-08-01
  • 2021-07-05
  • 2021-06-22
  • 2021-12-04
  • 2022-12-23
  • 2020-07-29
  • 2022-01-18
相关资源
相似解决方案