Given the root of a binary tree and a node u in the tree, return the nearest node on the same level that is to the right of u, or return null if u is the rightmost node in its level.
Example 1:
Input: root = [1,2,3,null,4,5,6], u = 4
Output: 5
Explanation: The nearest node on the same level to the right of node 4 is node 5.Example 2:
Input: root = [3,null,4,2], u = 2
Output: null
Explanation: There are no nodes to the right of 2.Example 3:
Input: root = [1], u = 1
Output: nullExample 4:
Input: root = [3,4,2,null,null,null,1], u = 4
Output: 2Constraints:
The number of nodes in the tree is in the range [1, 105].
1 <= Node.val <= 105
All values in the tree are distinct.
u is a node in the binary tree rooted at root.
Find Nearest Right Node in Binary Tree using BFS Algorithm
We know that the Breadth First Search Algorithm (BFS) traverses the tree/graph level-by-level. Thus, we know when we meet a given node – its next right neigbour on the same level. This is do-able by expanding the children nodes all at once.
At each iteration – we record the number of the nodes in the queue – which is the number of the total nodes that are all in the same level.
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* findNeartestRightNode(TreeNode* root, TreeNode* u) {
if (!root) return NULL;
queue<TreeNode*> Q;
Q.push(root);
while (!Q.empty()) {
auto sz = Q.size();
for (int i = 0; i < sz; ++ i) {
auto p = Q.front();
Q.pop();
if (p == u) { // given node
if (i == sz - 1) { // if we don't have right node(s)
return NULL;
}
return Q.front();
}
if (p->left) Q.push(p->left);
if (p->right) Q.push(p->right);
}
}
return NULL;
}
};
The runtime complexity is O(N) where N is the number of the nodes in the binary tree and the space requirement is also O(N) as we are using a queue to perform the Breadth First Search Algorithm.
–EOF (The Ultimate Computing & Technology Blog) —
503 wordsLast Post: Using Priority Queue to Compute the Slow Sums using Greedy Algorithm
Next Post: Reconnect the Nodes in Linked List by Odd/Even in Place (Odd Even Linked List)
