404. 左叶子之和
题目链接
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-left-leaves/submissions/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目描述
题目分析
- 递归法
后序遍历 左右中
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
if(root == nullptr) return 0;
int leftSum = sumOfLeftLeaves(root->left);//左
int rightSum = sumOfLeftLeaves(root->right);//右
int midValue = 0;
if(root->left != nullptr && root->left->left == nullptr && root->left->right == nullptr){
midValue = root->left->val;
}
return midValue + leftSum + rightSum;
}
};
- 迭代法
注意是叶子!
重点也是找左叶子:找到左叶子。首先是左结点,如果这个结点不为空,且没有左右孩子,那么这个结点就是左叶子。代码一直判断temp是否是左叶子。因为前提是左结点,所以要从左节点的父节点开始找。找到后结果加上左节点的值。
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
queue<TreeNode*> que;
int res = 0;
if(root != nullptr) que.push(root);
while(!que.empty()){
TreeNode* temp = que.front();
que.pop();
if(temp->left != nullptr && temp->left->left == nullptr && temp->left->right == nullptr){
res += temp->left->val;
}
if(temp->left != nullptr) que.push(temp->left);
if(temp->right != nullptr) que.push(temp->right);
}
return res;
}
};