mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
Update 0404.左叶子之和.md
添加python3 迭代方法的代码. Q: 我为什么要更改当前已有的递归代码? A: 因为我发现当前版本的递归代码跟Carl哥的逻辑不是特别一样. 我承认解题思路千变万化, 但是个人感觉最好最好还是尽量跟Carl的思路一样, 这样方便初学者阅读不同语言编写出来的代码.
This commit is contained in:
@ -205,25 +205,51 @@ class Solution {
|
|||||||
|
|
||||||
|
|
||||||
Python:
|
Python:
|
||||||
```Python
|
|
||||||
**递归**
|
**递归**
|
||||||
# Definition for a binary tree node.
|
```python
|
||||||
# class TreeNode:
|
|
||||||
# def __init__(self, val=0, left=None, right=None):
|
|
||||||
# self.val = val
|
|
||||||
# self.left = left
|
|
||||||
# self.right = right
|
|
||||||
class Solution:
|
class Solution:
|
||||||
def sumOfLeftLeaves(self, root: TreeNode) -> int:
|
def sumOfLeftLeaves(self, root: TreeNode) -> int:
|
||||||
self.res=0
|
if not root:
|
||||||
def areleftleaves(root):
|
return 0
|
||||||
if not root:return
|
|
||||||
if root.left and (not root.left.left) and (not root.left.right):self.res+=root.left.val
|
left_left_leaves_sum = self.sumOfLeftLeaves(root.left) # 左
|
||||||
areleftleaves(root.left)
|
right_left_leaves_sum = self.sumOfLeftLeaves(root.right) # 右
|
||||||
areleftleaves(root.right)
|
|
||||||
areleftleaves(root)
|
cur_left_leaf_val = 0
|
||||||
return self.res
|
if root.left and not root.left.left and not root.left.right:
|
||||||
|
cur_left_leaf_val = root.left.val # 中
|
||||||
|
|
||||||
|
return cur_left_leaf_val + left_left_leaves_sum + right_left_leaves_sum
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**迭代**
|
||||||
|
```python
|
||||||
|
class Solution:
|
||||||
|
def sumOfLeftLeaves(self, root: TreeNode) -> int:
|
||||||
|
"""
|
||||||
|
Idea: Each time check current node's left node.
|
||||||
|
If current node don't have one, skip it.
|
||||||
|
"""
|
||||||
|
stack = []
|
||||||
|
if root:
|
||||||
|
stack.append(root)
|
||||||
|
res = 0
|
||||||
|
|
||||||
|
while stack:
|
||||||
|
# 每次都把当前节点的左节点加进去.
|
||||||
|
cur_node = stack.pop()
|
||||||
|
if cur_node.left and not cur_node.left.left and not cur_node.left.right:
|
||||||
|
res += cur_node.left.val
|
||||||
|
|
||||||
|
if cur_node.left:
|
||||||
|
stack.append(cur_node.left)
|
||||||
|
if cur_node.right:
|
||||||
|
stack.append(cur_node.right)
|
||||||
|
|
||||||
|
return res
|
||||||
|
```
|
||||||
|
|
||||||
Go:
|
Go:
|
||||||
|
|
||||||
> 递归法
|
> 递归法
|
||||||
|
Reference in New Issue
Block a user