计算给定二叉树的所有左叶子之和。
示例:
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 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 ans;
int sumOfLeftLeaves(TreeNode* root) {
preOrder(root,false);
return ans;
}
void preOrder(TreeNode* root,bool isLeft)//先序遍历 isLeft变量指明是否是左叶子
{
if(!root)
return;
if(isLeft)//如果是左叶子
{
if(root->left==NULL&&root->right==NULL)
{
ans += root->val;
}
}
preOrder(root->left,true);//如果我们向左 那么一定是左叶子
preOrder(root->right,false);//向右了则不是左叶子
}
};