404. 左叶子之和
题意:
计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
解题思路:
问 答 题意 找出所有的左叶子(不是左孩子)节点然后相加即可 如何找出左叶子? 判断当前节点的左节点为叶子节点,即可说明当前节点的左节点为左叶子(递归终止条件). 如何获得结果? 先定义一个 count
用来返回结果,如果是叶子节点就让count
加上左叶子的值.递归条件 如果有左孩子或者右孩子就持续递归, count += 左孩子和右孩子返回的值
.
- 到这时整道题基本就完成了,大概就是判断为左叶子时就加上.如果不是叶子节点就持续递归直到结束.
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
//获取总数
int count = 0;
//如果为左叶子节点
if (root->left && root->left->left == nullptr && root->left->right == nullptr)
count += root->left->val;
//如果有孩子节点
if (root->left)
count += sumOfLeftLeaves(root->left);
if (root->right)
count += sumOfLeftLeaves(root->right);
return count;
}
};
总结:
这道题递归想法不是很难实现,就是左叶子节点的条件有点难判断.递归会造成点麻烦.