LeetCode 每日一题 1302. 层数最深叶子节点的和

题目链接

1302. 层数最深叶子节点的和

注意事项

要用非递归的方式求二叉树深度(即层次遍历BFS)

代码

class Solution {
public:
    int deepestLeavesSum(TreeNode* root) {

        vector<pair<int, int>> nodes;
        int sum = 0;
        int maxHeight = maxDeep(root, &nodes);

        for (int i = 0; i < nodes.size(); ++i) {
            if (maxHeight == nodes[i].second){
                sum += nodes[i].first;
            }
        }

        return sum;
    }

    int maxDeep(TreeNode* root, vector<pair<int, int>>* nodes){

        if (root == nullptr){
            return 0;
        }

        queue<TreeNode*> q;
        int depth = 0;

        q.push(root);
        while (!q.empty()){
            int cnt = 0;
            int currentNodes = q.size();
            depth++;

            while (cnt < currentNodes){
                bool f = true;
                TreeNode* treeNode = q.front();
                q.pop();

                if (treeNode->left != nullptr){
                    f = false;
                    q.push(treeNode->left);
                }

                if (treeNode->right != nullptr){
                    f = false;
                    q.push(treeNode->right);
                }

                if (f){
                    nodes->push_back({treeNode->val, depth});
                }

                cnt++;
            }
        }

        return depth;
    }
};
posted @ 2022-08-26 17:34  Frodo1124  阅读(18)  评论(0编辑  收藏  举报