leetcode 129 求根到葉子節點數字之和

2021-10-09 16:44:18 字數 1995 閱讀 3746

目錄

一、題目內容

二、解題思路

三、**

給定乙個二叉樹,它的每個結點都存放乙個 0-9 的數字,每條從根到葉子節點的路徑都代表乙個數字。

例如,從根到葉子節點路徑 1->2->3 代表數字 123。

計算從根到葉子節點生成的所有數字之和。

說明: 葉子節點是指沒有子節點的節點。

示例 1:

輸入: [1,2,3]

1/ \

2   3

輸出: 25

解釋:從根到葉子節點路徑 1->2 代表數字 12.

從根到葉子節點路徑 1->3 代表數字 13.

因此,數字總和 = 12 + 13 = 25.

示例 2:

輸入: [4,9,0,5,1]

4/ \

9   0

/ \5   1

輸出: 1026

解釋:從根到葉子節點路徑 4->9->5 代表數字 495.

從根到葉子節點路徑 4->9->1 代表數字 491.

從根到葉子節點路徑 4->0 代表數字 40.

因此,數字總和 = 495 + 491 + 40 = 1026.

每次就將之前的和乘以10再加當前節點的值,若沒有左右孩子,則說明到達葉子節點,即個位數,則得到從根節點到該葉子結點的和,返回。左 + 右 再返回。

# definition for a binary tree node.

class treenode:

def __init__(self, x):

self.val = x

self.left = none

self.right = none

def __repr__(self):

return str(self.val)

class solution:

def sumnumbers(self, root: treenode) -> int:

def dfs(root, sum):

if not root:

return 0

elif root.left is none and root.right is none:

return 10 * sum + root.val

else:

left = dfs(root.left, 10 * sum + root.val)

right = dfs(root.right, 10 * sum + root.val)

return left + right

return dfs(root, 0)

if __name__ == '__main__':

a = treenode(4)

a.left = treenode(9)

a.right = treenode(0)

a.left.left = treenode(5)

a.left.right = treenode(1)

# a = treenode(1)

# a.left = treenode(0)

# a = treenode(1)

# a.left = treenode(5)

# a.right = treenode(1)

# a.right.right = treenode(6)

s = solution()

ans = s.sumnumbers(a)

print(ans)

Leetcode 129 求根到葉子節點數字之和

給定乙個二叉樹,它的每個結點都存放乙個0 9的數字,每條從根到葉子節點的路徑都代表乙個數字。例如,從根到葉子節點路徑1 2 3代表數字123。計算從根到葉子節點生成的所有數字之和。說明 葉子節點是指沒有子節點的節點。示例 1 輸入 1,2,3 1 2 3輸出 25解釋 從根到葉子節點路徑 1 2代表...

Leetcode 129 求根到葉子節點數字之和

給定乙個二叉樹,它的每個結點都存放乙個0 9的數字,每條從根到葉子節點的路徑都代表乙個數字。例如,從根到葉子節點路徑1 2 3代表數字123。計算從根到葉子節點生成的所有數字之和。說明 葉子節點是指沒有子節點的節點。示例 1 輸入 1,2,3 1 2 3輸出 25解釋 從根到葉子節點路徑1 2代表數...

LeetCode 129 求根到葉子節點數字之和

題目描述 提示幫助 提交記錄社群討論閱讀解答 隨機一題 給定乙個二叉樹,它的每個結點都存放乙個0 9的數字,每條從根到葉子節點的路徑都代表乙個數字。例如,從根到葉子節點路徑1 2 3代表數字123。計算從根到葉子節點生成的所有數字之和。說明 葉子節點是指沒有子節點的節點。示例 1 輸入 1,2,3 ...