12、C++算法之代码随想录(二叉树)——左叶子之和
·
1.问题
给定二叉树的根节点 root ,返回所有左叶子之和。
示例 1:

输入: root = [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
示例 2:
输入: root = [1] 输出: 0
2.思路
如何找二叉树的左叶子,需要通过父节点来判断。如果root->left存在并且root->left->left与root->left->right不存在,则root->left为左叶子。
遍历整个二叉树找到所有的左叶子然后累加即可。递归一般采用后序遍历(左右根)。在递归过程中累加左叶子值。
3.代码实现
int sumOfLeftLeaves(TreeNode* root) {
if(root==nullptr) return 0; //当前节点为空,直接返回
if(root->left==nullptr&&root->right==nullptr) return 0; //当前节点的左右子节点都不存在,也直接返回(这一行可以不行,程序会多遍历一层叶子节点)
int leftValue = sumOfLeftLeaves(root->left); //左子树
if(root->left&&!root->left->left&&!root->left->right){ //找到左叶子,赋值
leftValue = root->left->val;
}
int rightValue = sumOfLeftLeaves(root->right); //右子树
int sum = leftValue+rightValue; //累加
return sum;
}
更多推荐

所有评论(0)