左叶子之和-力扣404

47 阅读1分钟

左叶子之和-力扣404

先根遍历找到所有左叶子结点并将其值全部加起来即可。

需要注意的是,判断一个叶子结点是否是叶子结点无法直接通过他自己就得到,应该由其父结点来判断

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int sum = 0;
    void preOrder(TreeNode* root){
        if(root == nullptr) return;
        
        // // 无法直接根据叶子结点判自身是否是左孩子结点,应该由其父亲结点来判断
        // if(root->left == nullptr && root->right == nullptr){ // 如果是叶子结点
        // }

        if(root->left && root->left->left == nullptr && root->left->right == nullptr){
            sum += root->left->val;
        }
        preOrder(root->left);
        preOrder(root->right);
    }

    int sumOfLeftLeaves(TreeNode* root) {
        preOrder(root);
        return sum;
    }
};

时间复杂度: O(n)O(n)

空间复杂度: 平均O(logn)O(logn),最坏O(n)O(n)