leetcode 404. 左叶子之和

leetcode 404. 左叶子之和

题目详情

题目链接
计算给定二叉树的所有左叶子之和。

  • 示例:
    3
    / \
    9 20
    / \
    15 7

在这个二叉树中,有两个左叶子,分别是 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 {
private:
    int restult;
public:
    void getResult(TreeNode* root) {
        if (root) {
            if (root->left) {
                if (!root->left->left && !root->left->right) {
                    restult += root->left->val;
                } else {
                    getResult(root->left);
                }
            }
            getResult(root->right);
        }
    }
    int sumOfLeftLeaves(TreeNode* root) {
        restult = 0;
        getResult(root);
        return restult;
    }
};

我的成绩

执行结果:通过
执行用时:4 ms, 在所有 C++ 提交中击败了89.39%的用户
内存消耗:13.1 MB, 在所有 C++ 提交中击败了70.56%的用户

一些想法

递归即可。

执行用时为 0 ms 的范例

/**
 * 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;
        }
        std::queue<TreeNode*> nodes;
        nodes.push(root);
        int left_leaf_sum = 0;
        TreeNode* node = NULL;
        while (!nodes.empty()) {
            node = nodes.front();
            nodes.pop();
            if (node->left) {
                if (node->left->left == NULL && node->left->right == NULL) {
                    left_leaf_sum += node->left->val;
                } else {
                    nodes.push(node->left);
                }
            }
            if (node->right) {
                nodes.push(node->right);
            }
        }
        return left_leaf_sum;
    }
};

思考

参见官方解答

©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页