左叶子之和

本文参考代码随想录

计算给定二叉树所有左叶子节点之和

递归法

当遇到左叶子节点时记录数值,然后递归分别求左子树左叶子节点之和和右子树左叶子节点之和

class Solution {
public:
    int sumOfLeftLeaves(TreeNode* root) {
        if(root == nullptr) return 0;
        if(root->left == nullptr && root->right == nullptr) return 0;

        int leftValue = sumOfLeftLeaves(root->left);
        if(root->left && !root->left->left && !root->left->right) {//左孩子是叶子结点
            leftValue = root->left->val;
        }
        int rightValue = sumOfLeftLeaves(root->right);

        int sum = leftValue + rightValue;
        return sum;
    }
};

迭代法

class Solution {
public:
    int sumOfLeftLeaves(TreeNode* root) {
        stack<TreeNode*> st;
        if(root == nullptr) return 0;
        st.push(root);
        int result = 0;
        while(!st.empty()){
            TreeNode* node = st.top();
            st.pop();
            if(node->left != nullptr && node->left->left == nullptr && node->left->right == nullptr) {
                result += node->left->val;
            }
            if(node->right) st.push(node->right);
            if(node->left) st.push(node->left);
        }
        return result;
    }
};

你可能感兴趣的:(刷题必背,算法,数据结构)