diff --git a/problems/0404.左叶子之和.md b/problems/0404.左叶子之和.md index e55981e2..19149285 100644 --- a/problems/0404.左叶子之和.md +++ b/problems/0404.左叶子之和.md @@ -42,7 +42,7 @@ if (node->left != NULL && node->left->left == NULL && node->left->right == NULL) ## 递归法 -递归的遍历顺序为后序遍历(左右中),是因为要通过递归函数的返回值来累加求取左叶子数值之和。。 +递归的遍历顺序为后序遍历(左右中),是因为要通过递归函数的返回值来累加求取左叶子数值之和。(前序遍历其实也同样AC) 递归三部曲: @@ -230,8 +230,8 @@ class Solution { ## Python -**递归** -```python +> 递归后序遍历 +```python3 class Solution: def sumOfLeftLeaves(self, root: TreeNode) -> int: if not root: @@ -246,9 +246,36 @@ class Solution: return cur_left_leaf_val + left_left_leaves_sum + right_left_leaves_sum ``` +> 递归前序遍历 +```python3 +# 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: TreeNode) -> int: + # 需要通过中节点来判断其的左节点是否存在;左节点自己的左右节点也是否存在 -**迭代** -```python + if not root: return 0 + + # 初始化left_leaf备用 + left_leaf = 0 + # 若当前节点的左孩子就是左叶子 + if root.left and not root.left.left and not root.left.right: + left_leaf = root.left.val + + left_left_leaves_sum = self.sumOfLeftLeaves(root.left) + right_left_leaves_sum = self.sumOfLeftLeaves(root.right) + + + return left_leaf + left_left_leaves_sum + right_left_leaves_sum +``` + + +> 迭代 +```python3 class Solution: def sumOfLeftLeaves(self, root: TreeNode) -> int: """