【代码随想录day 15】 力扣 404. 左叶子之和
视频讲解:https://www.bilibili.com/video/BV1GY4y1K7z8/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0404.%E5%B7%A6%E5%8F%B6%E5%AD%90%E4%B9%8B%E5%92%8C.html
力扣题目:https://leetcode.cn/problems/sum-of-left-leaves/description/
这道题需要记录左叶子的值,所以需要先遍历再记录,我们这里采用后序遍历的,需要注意的是,我们需要去判断节点是否为叶子节点,如果是叶子节点,并且是左叶子节点,进行记录操作。之后进行递归操作。
class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {//如果根节点为空,直接return 0if(!root) return 0;//如果只有一个根节点没有左右子树,return 0if(root->left==NULL&&root->right==NULL) return 0;//开始递归//左int leftval=sumOfLeftLeaves(root->left);//如果遍历的节点存在左节点并且左节点是叶子节点,加入它的值if(root->left && root->left->left == NULL && root->left->right == NULL){//记录左叶子的值leftval=root->left->val;}int rightval = sumOfLeftLeaves(root->right);//计算左右之和int sum = leftval + rightval;return sum;}
};
这是C语言对应的代码,和上面的思路一样
int sumOfLeftLeaves(struct TreeNode* root) {//如果节点为空,返回0if(!root) return 0;//如果节点没有左右子树,返回0if(root->left == NULL && root->right == NULL) return 0;//开始递归//左int leftval = sumOfLeftLeaves(root->left);//如果节点存在左节点,且左节点是叶子节点if (root->left && !root->left->left && !root->left->right) {leftval = root->left->val;}//右int rightval = sumOfLeftLeaves(root->right);//计算和int sum = leftval + rightval;//返回值return sum;
}