LeetCode/solutions/404. Sum of Left Leaves.md

50 lines
1.6 KiB
Markdown
Raw Normal View History

2018-11-14 14:43:57 +00:00
# [404. Sum of Left Leaves](https://leetcode.com/problems/sum-of-left-leaves/description/)
# 思路
计算一棵二叉树所有左叶子的值之和。
## 思路一
设置一个初始为0的全局变量res遍历一遍树判断某节点的左子树是否是叶子若是则将这个叶子的值加至res遍历完后返回res即可。
## 思路二
直接递归计算结果res。因为某棵树的res等于其左子树的res加上右子树的res。
# C++
## 思路一
``` C++
class Solution {
private:
int res = 0;
bool is_leaf(TreeNode *p){ // 判断是否是叶子
if(p == NULL) return false;
return (p -> left == NULL && p -> right == NULL);
}
void find_left_leaf(TreeNode *root){
if(root == NULL || is_leaf(root)) return;
if(is_leaf(root -> left)) res += root -> left -> val; // 左子树是叶子加至res
else find_left_leaf(root -> left);
find_left_leaf(root -> right);
}
public:
int sumOfLeftLeaves(TreeNode* root) {
find_left_leaf(root);
return res;
}
};
```
## 思路二
``` C++
class Solution {
private:
bool is_leaf(TreeNode *p){ // 判断是否是叶子
if(p == NULL) return false;
return (p -> left == NULL && p -> right == NULL);
}
public:
int sumOfLeftLeaves(TreeNode* root) {
if(root == NULL || is_leaf(root)) return 0;
if(is_leaf(root -> left)) return (root -> left -> val) + sumOfLeftLeaves(root -> right);
else return sumOfLeftLeaves(root -> left) + sumOfLeftLeaves(root -> right);
}
};
```