diff --git a/Medium/1361. Validate Binary Tree Nodes/Readme.md b/Medium/1361. Validate Binary Tree Nodes/Readme.md new file mode 100644 index 0000000..902a71c --- /dev/null +++ b/Medium/1361. Validate Binary Tree Nodes/Readme.md @@ -0,0 +1,30 @@ +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. + +If node i has no left child then leftChild[i] will equal -1, similarly for the right child. + +Note that the nodes have no values and that we only use the node numbers in this problem. + + + +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 + + +Constraints: + +n == leftChild.length == rightChild.length +1 <= n <= 104 +-1 <= leftChild[i], rightChild[i] <= n - 1 \ No newline at end of file diff --git a/Medium/1361. Validate Binary Tree Nodes/solution.py b/Medium/1361. Validate Binary Tree Nodes/solution.py new file mode 100644 index 0000000..cc3881d --- /dev/null +++ b/Medium/1361. Validate Binary Tree Nodes/solution.py @@ -0,0 +1,35 @@ +class Solution: + def validateBinaryTreeNodes(self, n, leftChild, rightChild): + indegree = [0] * n + + for i in range(n): + if leftChild[i] != -1: + indegree[leftChild[i]] += 1 + if rightChild[i] != -1: + indegree[rightChild[i]] += 1 + + root = None + for i in range(n): + if indegree[i] == 0: + if root is None: + root = i + else: + return False + + if root is None: + return False + + visited = [False] * n + queue = deque([root]) + + while queue: + node = queue.popleft() + if visited[node]: + return False + visited[node] = True + if leftChild[node] != -1: + queue.append(leftChild[node]) + if rightChild[node] != -1: + queue.append(rightChild[node]) + + return sum(visited) == n \ No newline at end of file