递归的进一步探索

在这里插入图片描述
对于这个题目,在我思路还没有理清楚的时候写出了一个可以运行的代码

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;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值