Leetcode daily challenge: 25 Dec,2024.
Problem link
BFS is perfect when we are dealing specifically with rows/levels of a binary tree. With BFS, we handle one row of the tree at a time.
Here, we need to find the maximum value in each row. We can simply perform a BFS and for each row, keep track of the maximum value we have seen so far.
void bfs( TreeNode* node, vector<int>& result){
        queue<TreeNode *>Q;
        Q.push(node);
        int qSize = Q.size();
        int count =0;
        while(!Q.empty()){
            count = 0;
            priority_queue<int>heap;
            qSize = Q.size();
            while(count<qSize){// for each level/row find max value
                count++;
                TreeNode* temp = Q.front();
                Q.pop();
                heap.push(temp->val);
                if(temp->left != NULL)
                Q.push(temp->left);
                if(temp->right != NULL)
                Q.push(temp->right);
            }//while ends
            if(heap.size())
            result.push_back(heap.top());
        }
    }
    vector<int> largestValues(TreeNode* root) {
        if(root == NULL)
        return {};
        vector<int>result;
        bfs(root, result);///call bfs
        return result;
    }
Video link with detailed explanation will be found here.
              
    
Top comments (0)