Breadth First Search Algorithm to Find Nearest Right Node in Binary Tree


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.

binary-tree-nearest-right-node Breadth First Search Algorithm to Find Nearest Right Node in Binary Tree algorithms BFS

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: null

Example 4:
Input: root = [3,4,2,null,null,null,1], u = 4
Output: 2

Constraints:
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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
 * 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;
    }
};
/**
 * 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) —

GD Star Rating
loading...
520 words
Last 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)

The Permanent URL is: Breadth First Search Algorithm to Find Nearest Right Node in Binary Tree

Leave a Reply