12.Validate Binary Tree Nodes
You have n
binary tree nodes numbered from 0
to n - 1
where node i
has two children leftChild[i]
and rightChild[i]
, return true
if and only if all the given nodes form exactly one valid binary tree.
Example 1:
Input: n = 4, leftChild = [1,-1,3,-1], rightChild = [2,-1,-1,-1]
Output: true
Example 2:
Input: n = 4, leftChild = [1,-1,3,-1], rightChild = [2,3,-1,-1]
Output: false
Example 3:
Input: n = 2, leftChild = [1,0], rightChild = [-1,-1]
Output: false
Example 4:
Input: n = 6, leftChild = [1,-1,-1,4,-1,-1], rightChild = [2,-1,-1,5,-1,-1]
Output: false
Solution : (Using BFS)
class Solution
{
public:
bool validateBinaryTreeNodes(int n, vector<int> &leftChild, vector<int> &rightChild)
{
//finding parents
vector<int> par(n);
for (int i = 0; i < n; i++)
{
if (leftChild[i] != -1)
{
par[leftChild[i]]++;
}
if (rightChild[i] != -1)
{
par[rightChild[i]]++;
}
}
// if A --> B exists then B --> A should not exist
int node = -1;
for (int i = 0; i < n; i++)
{
if (par[i] == 0)
{
node = i;
break;
}
}
if (node == -1)
{
return false;
}
//finding loop
vector<bool> vs(n);
queue<int> q;
q.push(node);
vs[node] = 1;
while (!q.empty())
{
int x = q.front();
q.pop();
int lc = leftChild[x];
if (lc != -1)
{
if (vs[lc] == 0)
{
q.push(lc);
vs[lc] = 1;
}
else
{
return false;
}
}
int rc = rightChild[x];
if (rc != -1)
{
if (vs[rc] == 0)
{
q.push(rc);
vs[rc] = 1;
}
else
{
return false;
}
}
}
//checking connectivity
for (int i = 0; i < n; i++)
{
if (vs[i] == 0)
{
return false;
}
}
return true;
}
};
Last updated