二叉树遍历问题罢了。
定义一个sum,sum理解为每个节点都有一个sum,sum就是以这个节点为根的树的左叶子之和。故可以理解为对于求这棵树的sum,就是求节点的sum = 左树的sum + 右树的sum。这是递归条件。
还有结束递归条件:就是左子是叶子节点,就把左叶子值加入sum。这样就能递归到叶子节点,返回空。
int sumOfLeftLeaves(struct TreeNode* root ) {
// write code here
if(root == NULL)
{
return 0;
}
int sum = 0;
if(root->left && root->left->left == NULL && root->left->right == NULL)
{
sum = root->left->val;
}
return sum + sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right);
}
我觉得这个不好理解,我再写一个⑧
另一种思路
好理解但是写起来复杂,是写出了所有可能出现的情况。
int sumOfLeftLeaves(struct TreeNode* root ) {
// write code here
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
return root->val;
}
if (root->left ) {
if (root->right == NULL) {
return sumOfLeftLeaves(root->left);
} else if (root->right->left == NULL && root->right->right == NULL) {
return sumOfLeftLeaves(root->left);
} else {
return sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right);
}
} else {
if (root->right == NULL) {
return sumOfLeftLeaves(root->left);
} else if (root->right->left == NULL && root->right->right == NULL) {
return sumOfLeftLeaves(root->left);
} else {
return sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right);
}
}
}