問題
原文
Given the
root
of a binary tree, return the sum of all left leaves.A leaf is a node with no children. A left leaf is a leaf that is the left child of another node.
Example 1:
123 Input: root = [3,9,20,null,null,15,7]Output: 24Explanation: There are two left leaves in the binary tree, with values 9 and 15 respectively.Example 2:
12 Input: root = [1]Output: 0
Constraints:
- The number of nodes in the tree is in the range
[1, 1000]
.-1000 <= Node.val <= 1000
内容
二分木rootが与えられるので、全ての左の葉ノードの合計を返してください。
葉ノードとは子ノードを持たないノードです。
左の葉ノードとは、他ノードの子ノードである葉ノードです。
※子ノードを持たない根ノードや、子ノードを1つだけ持つノードは合計に含みません。
※正しくない可能性があります。
解答
解答1:Python, BFS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int: if not root: return 0 #キューを用意 q = deque() #キューに根ノードを入れる q.append(root) #解答を0で初期化 answer = 0 #キューに要素がある限り繰り返す while q: #nodeにキューの先頭の要素を取り出す node = q.pop() #nodeがNullでない場合 if node: #左のノードがあれば if node.left: #キューに左の子ノードを追加 q.append(node.left) #左の子ノードが左右の子ノードを持たない(つまり、葉ノードの場合) if (not node.left.left) and (not node.left.right): #解答に左の子ノードの値を加える answer += node.left.val #右の子ノードがあれば if node.right: #キューに右の子ノードを追加 q.append(node.right) return answer |
幅優先探索で解答
各ノードの、左の子ノードが、さらに子ノードを一つも持たないことを条件に加えることで、合計に加えるかどうかの判定ができる。
メモ・参考・感想
前:1281. Subtract the Product and Sum of Digits of an Integer
コメント