diff --git a/java/create-binary-tree-from-descriptions.java b/java/create-binary-tree-from-descriptions.java new file mode 100644 index 0000000..79b0b2f --- /dev/null +++ b/java/create-binary-tree-from-descriptions.java @@ -0,0 +1,31 @@ +class Solution { + public TreeNode createBinaryTree(int[][] descriptions) { + Map nodes = new HashMap<>(); + + Set hasParent = new HashSet<>(); + for (int[] description : descriptions) { + int parent = description[0]; + int value = description[1]; + boolean isLeft = description[2] == 1; + + var parentNode = nodes.computeIfAbsent(parent, k -> new TreeNode(k)); + var node = nodes.computeIfAbsent(value, k -> new TreeNode(k)); + + if (isLeft) { + parentNode.left = node; + } else { + parentNode.right = node; + } + + hasParent.add(value); + } + + for (var node : nodes.values()) { + if (!hasParent.contains(node.val)) { + return node; + } + } + + return null; + } +}