zoukankan      html  css  js  c++  java
  • LeetCode——求根到叶子节点数字之和

    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);
            }
        }
    
  • 相关阅读:
    poj3016
    BZOJ2560 串珠子
    HAOI 2009 逆序对数列
    BJOI2012 最多的方案
    ZJOI2008 生日聚会
    ZJOI2008 骑士
    SCOI2003 严格N元树
    SDOI2010 地精部落
    USACO Section 3.2 Stringsobits
    JLOI2013 卡牌游戏
  • 原文地址:https://www.cnblogs.com/xym4869/p/12488444.html
Copyright © 2011-2022 走看看