Untitled
unknown
c_cpp
2 years ago
1.3 kB
5
Indexable
class Solution { public: vector <int> bottomView(Node *root) { vector<int> bottomView; if (root == NULL) return bottomView; // This stores horizontal distance of nodes from centre line like -1, -2, 0, 2 etc. // HorzDist of root is 0 and -1, 1 for its left and right child respectively. map<int, int> horzDistMap; // Stores node and its horzDist queue<pair<Node *, int>> q; q.push({root, 0}); while (!q.empty()) { int levelSize = q.size(); for (int i = 1; i <= levelSize; i++) { Node *curr = q.front().first; int horzDist = q.front().second; q.pop(); horzDistMap[horzDist] = curr -> data; // at each level update the node at a horzDist. if (curr -> left != NULL) q.push({curr -> left, horzDist - 1}); if (curr -> right != NULL) q.push({curr -> right, horzDist + 1}); } } // print nodes from -ve horzDist to +ve. for (auto entry : horzDistMap) bottomView.push_back(entry.second); return bottomView; } };
Editor is loading...