【easy】404. Sum of Left Leaves

求所有左节点的和。

 

/**
 * 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==NULL) 
            return 0;
        else if(root->left!=NULL && root->left->left==NULL && root->left->right==NULL) //相当于递归的终止情形
            return root->left->val+sumOfLeftLeaves(root->right);
        else 
            return sumOfLeftLeaves(root->left)+sumOfLeftLeaves(root->right);
        //这个题分成以下几种情况进行讨论
        //--如果当前节点是空,毫无疑问返回0
        //--如果有左节点,但是左节点没有任何的子节点(左节点的值+右子树的和)
        //--其他的情况:左子树和+右子树和
        
        
        //傻孩子,这是你想的最好,但是错的最离谱的一次
        /*
        if (root == NULL || (root->left == NULL && root->right == NULL))
            return 0; 
        if (root->left == NULL && root->right != NULL)
            return sumOfLeftLeaves(root->right);
        if (root->left != NULL && root->right == NULL)
            return root->left->val + sumOfLeftLeaves(root->left);
        if (root->left != NULL && root->right != NULL)
            return root->left->val + sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right);
        */
    }
};

 

posted @ 2018-01-25 21:35  Sherry_Yang  阅读(99)  评论(0编辑  收藏  举报