方法1:
最容易想到的就是遞歸方法,保持一個response,每到一個葉節點就把結果與res相加
class Solution(object):
def sumNumbers(self, root):
self.res = 0
self.dfs(root, 0)
return self.res
def dfs(self, root, value):
if root:
self.dfs(root.left, value*10+root.val)
self.dfs(root.right, value*10+root.val)
if not root.left and not root.right:
self.res += value*10 + root.val
方法2:
還可以用迭代的方法,思路和遞歸一樣,不過這里用list實現了棧的操作
class Solution(object):
def sumNumbers(self, root):
if not root:
return 0
stack, res = [(root, root.val)], 0
while stack:
node, value = stack.pop()
if node:
if not node.left and not node.right:
res += value
if node.right:
stack.append((node.right, value*10+node.right.val))
if node.left:
stack.append((node.left, value*10+node.left.val))
return res