其他分享
首页 > 其他分享> > LeetCode 129 求根到叶子节点数字之和 题解

LeetCode 129 求根到叶子节点数字之和 题解

作者:互联网

LeetCode 129 求根到叶子节点数字之和 题解

给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。https://leetcode-cn.com/problems/sum-root-to-leaf-numbers/
例如,从根到叶子节点路径 1->2->3 代表数字 123。
计算从根到叶子节点生成的所有数字之和。
说明: 叶子节点是指没有子节点的节点。
示例 1:
输入: [1,2,3]
    1
   / \
  2   3
输出: 25
解释:
从根到叶子节点路径 1->2 代表数字 12.
从根到叶子节点路径 1->3 代表数字 13.
因此,数字总和 = 12 + 13 = 25.

方法:

1.递归 dfs

注意观察规律,计算的时候,根节点到当前结点所组成的数字是根节点到上一个结点组成的数字*10+当前节点的值
时间复杂度:O(n),其中 n 是二叉树的节点个数。对每个节点访问一次。
空间复杂度:O(n),其中 n 是二叉树的节点个数。空间复杂度主要取决于递归调用的栈空间,递归栈的深度等于二叉树的高度,最坏情况下,二叉树的高度等于节点个数,空间复杂度为 O(n)。

class Solution {
        public int sumNumbers(TreeNode root) {
        return helper(root, 0);
    }

//i为root之前的路径构成的数值的大小,比如1-2-3,root=3时,i=12
    public int helper(TreeNode root, int i){
        if (root == null) return 0;
        int temp = i * 10 + root.val;
        //递归的出口是叶子结点
        if (root.left == null && root.right == null)
        return temp;
        return helper(root.left, temp) + helper(root.right, temp);
    }
}

2. bfs

class Solution {
    public int sumNumbers(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int sum = 0;
        Queue<TreeNode> nodeQueue = new LinkedList<TreeNode>();
        Queue<Integer> numQueue = new LinkedList<Integer>();
        nodeQueue.offer(root);
        numQueue.offer(root.val);
        while (!nodeQueue.isEmpty()) {
            TreeNode node = nodeQueue.poll();
            int num = numQueue.poll();
            TreeNode left = node.left, right = node.right;
            if (left == null && right == null) {
                sum += num;
            } else {
                if (left != null) {
                    nodeQueue.offer(left);
                    numQueue.offer(num * 10 + left.val);
                }
                if (right != null) {
                    nodeQueue.offer(right);
                    numQueue.offer(num * 10 + right.val);
                }
            }
        }
        return sum;
    }
}

标签:right,int,题解,节点,LeetCode,null,root,求根,left
来源: https://blog.csdn.net/qq_39618369/article/details/120784265