左叶子之和使用前序遍历寻找左叶子。

左叶子的判断:

  • root->left存在而且root->left->left和root->left->right为null

代码:

class Solution {
public:
    vector path;
    void findLeft(TreeNode* root){
        if (root == nullptr) return;
        // 1 找到左叶子
        if (root->left && root->left->left==nullptr && root->left->right == nullptr) path.push_back(root->left->val);
        // 2 遍历
        if (root->left) findLeft(root->left);
        if (root->right) findLeft(root->right);
    }

    int sumOfLeftLeaves(TreeNode* root) {
        if (root==nullptr) return 0;
        findLeft(root);
        int total = 0;
        for(auto p:path) total += p;
        return total;
    }
};