计算给定二叉树的所有左叶子之和。
示例:
3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
思路:
二叉树的左叶子节点可能存在于它的左子树和右子树里。从这两部分分别进行讨论求出左叶子节点,再相加即得到所求。
- 如果二叉树的左子树是一个叶子节点,则不用继续深入下去了,要找的就是它。
- 如果二叉树的左子树不是一个叶子节点,则递归调用此过程去获取左子树的左叶子节点的值。
- 而对于二叉树的右子树,则无论其是否是一个叶子节点都不会影响结果,直接递归调用获取右子树的左叶子节点值即可。
按照上述递归的思想。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
#include <stdlib.h>
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
if (root == NULL) return 0;
int left = 0;
int right = 0;
if (root->left != NULL && root->left->left == NULL && root->left->right == NULL) {
left = root->left->val;
}
else {
left = sumOfLeftLeaves(root->left);
}
right = sumOfLeftLeaves(root->right);
return left + right;
}
};