給定乙個二叉樹,它的每個結點都存放乙個 0-9 的數字,每條從根到葉子節點的路徑都代表乙個數字。
例如,從根到葉子節點路徑 1->2->3 代表數字 123。
計算從根到葉子節點生成的所有數字之和。
說明: 葉子節點是指沒有子節點的節點。
示例 1:輸入: [1,2,3]
1/ \
2 3
輸出: 25
解釋:從根到葉子節點路徑 1->2 代表數字 12.
從根到葉子節點路徑 1->3 代表數字 13.
因此,數字總和 = 12 + 13 = 25.
根本點在於dfs深度優先遍歷。
具體分析:
需要有乙個值下傳和回傳的過程。
值下傳是為了讓子節點知道父節點的val值,回傳是為了讓父節點能夠將左右子節點返回的值相加得到最後結果。
新建立乙個新函式func dfs(root *treenode, copyval int) int{}
對於所求函式來說,相當於copyval = 0
對於遞迴的三個情況:
根節點:
copyval = 0
中間節點:
彙總自己的節點val和父節點的val,即父節點val * 10 + 自身的 val,
將這個和下傳給自己的左右子節點。
要回傳左右子節點返回的值,相加進行return
葉子節點:
到這裡為遞迴的停止,即root.left == nil && root.right == nil
。
所以將得到值×10 + 自身的val 返回。
/**
* definition for a binary tree node.
* type treenode struct
*/func sumnumbers(root *treenode) int
func dfs(root *treenode, copyval int) int
giveval := root.val + 10 * copyval
if root.left == nil && root.right == nil
return dfs(root.left, giveval) + dfs(root.right,giveval)
}
129 求根到葉子節點數字之和
有一篇講得非常好的 先說一下一開始的錯誤,首先是在遇到葉子節點以後企圖將temp clear調,這樣是完全不對的 因為temp全域性的,清空temp會讓除了該葉子節點以外的前面的節點也清除掉。這樣比如說訪問完某個節點的左子樹以後,再訪問該節點的右子樹時,根節點已經不在裡面了。所以,不行。考慮到上面那...
129 求根到葉子節點數字之和
給定乙個二叉樹,它的每個結點都存放乙個 0 9 的數字,每條從根到葉子節點的路徑都代表乙個數字。例如,從根到葉子節點路徑 1 2 3 代表數字 123。計算從根到葉子節點生成的所有數字之和。說明 葉子節點是指沒有子節點的節點。示例 1 輸入 1,2,3 1 2 3輸出 25 解釋 從根到葉子節點路徑...
求根到葉子節點數字之和
給定乙個二叉樹,它的每個結點都存放乙個0 9的數字,每條從根到葉子節點的路徑都代表乙個數字。例如,從根到葉子節點路徑1 2 3代表數字123。計算從根到葉子節點生成的所有數字之和。說明 葉子節點是指沒有子節點的節點。示例 1 輸入 1 2,3 1 2 3輸出 25解釋 從根到葉子節點路徑 1 2 代...