二叉树
类型第24篇解题报告
leetcode第404题:左叶子之和
https://leetcode-cn.com/problems/sum-of-left-leaves/
【题目】
计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
【思路】
本题较为简单,递归遍历二叉树,得到左叶子节点(可设定标签判定是否为左叶子节点),求和即可。
【代码】
python版本
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
return self.get_sum(False, root)
def get_sum(self, is_left, node):
if not node.left and not node.right:
if is_left:
return node.val
else:
return 0
res = 0
if node.left:
res += self.get_sum(True, node.left)
if node.right:
res += self.get_sum(False, node.right)
return res
C++版本
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
if(!root)
return 0;
return get_sum(false, root);
}
int get_sum(bool is_left, TreeNode* node){
if(!node->left && !node->right){
if(is_left)
return node->val;
else
return 0;
}
int res = 0;
if(node->left)
res += get_sum(true, node->left);
if(node->right)
res += get_sum(false, node->right);
return res;
}
};