问题描述:
Find the sum of all left leaves in a given binary tree.
Example:
3 / \ 9 20 / \ 15 7 There are two left leaves in the binary tree, with values 9 and 15 respectively. Return 24.
问题分析:
由题意可知,寻找二叉树的所有左叶子节点,然后将它们相加,直接使用深度优先搜索来遍历,采用递归来实现。每遍历一个节点,判断一下是否是左叶子节点,判断叶子节点直接看是否由左右孩子节点即可,判断是否是左叶子节点,可通过上一个节点传值来判断,把所有左叶子节点的值相加即可。这里需要注意的是根节点不算是左叶子节点,因此要予以排除。
具体实现:
/**
* 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;
int res=0;
searchTree(res,root,0);
return res;
}
void searchTree(int &res, TreeNode* root, int flag)
{
if(root->left)
searchTree(res, root->left,1);
if(root->right)
searchTree(res, root->right,0);
if(root->left==NULL&&root->right==NULL&&flag==1)
{
res+=root->val;
}
}
};