对于这个题目,在我思路还没有理清楚的时候写出了一个可以运行的代码
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
//终止条件
if (root == NULL) {
return 0;
}
int lsum = 0;
int rsum = 0;
if (root->left != NULL && root->left->left == NULL && root->left->right == NULL) {
lsum = root->left->val;
rsum=sumOfLeftLeaves(root->right);
}
else {
lsum = sumOfLeftLeaves(root->left);
rsum = sumOfLeftLeaves(root->right);
}
return lsum + rsum;
}
};
经过进一步查看讲解屡清楚思路,发现我没有严格按照后序遍历的方式来递归,写的多少有些想当然。
进一步改进,发现我的每个根节点这是负责汇总下面传上来的结果,因此我们需要用到左右后的中序遍历的方法来编写程序。
int sumOfLeftLeaves(TreeNode* root) {
//终止条件
if (root == NULL) {
return 0;
}
//遍历方式:后序遍历,因为是到最后汇总
int lsum = sumOfLeftLeaves(root->left);//左
int rsum = sumOfLeftLeaves(root->right);//右
//中,对于单个节点来说,如果是左叶子点,那么就讲它的值加进去
if (root->left != NULL && root->left->left == NULL && root->left->right == NULL) {
return lsum + rsum + root->left->val;
}
return lsum + rsum;
}