1. 程式人生 > 其它 >LeetCode129 求根節點到葉子節點數字之和

LeetCode129 求根節點到葉子節點數字之和

題目

給你一個二叉樹的根節點 root ,樹中每個節點都存放有一個 0 到 9 之間的數字。
每條從根節點到葉節點的路徑都代表一個數字:

例如,從根節點到葉節點的路徑 1 -> 2 -> 3 表示數字 123 。
計算從根節點到葉節點生成的 所有數字之和 。

葉節點 是指沒有子節點的節點。

示例 1:
輸入:root = [1,2,3]
輸出:25
解釋:
從根到葉子節點路徑 1->2 代表數字 12
從根到葉子節點路徑 1->3 代表數字 13
因此,數字總和 = 12 + 13 = 25
示例 2:
輸入:root = [4,9,0,5,1]
輸出:1026
解釋:
從根到葉子節點路徑 4->9->5 代表數字 495
從根到葉子節點路徑 4->9->1 代表數字 491
從根到葉子節點路徑 4->0 代表數字 40
因此,數字總和 = 495 + 491 + 40 = 1026

提示:
樹中節點的數目在範圍 [1, 1000] 內
0 <= Node.val <= 9
樹的深度不超過 10

方法

深度優先遍歷法

  • 時間複雜度:O(n),n為二叉樹節點個數
  • 空間複雜度:O(n)
class Solution {
    private int sum = 0;
    public int sumNumbers(TreeNode root) {
        return dfs(root,0);
    }
    private int dfs(TreeNode root,int preSum) {
        if(root == null) return 0;
        preSum = preSum*10+root.val;
        if(root.left==null&&root.right==null){
            return preSum;
        }
        return dfs(root.left,preSum)+dfs(root.right,preSum);
    }
}

廣度優先遍歷法

  • 時間複雜度:O()
  • 空間複雜度:O()