2196 - Create Binary Tree From Descriptions
JAVA
class Solution {
public TreeNode createBinaryTree(int[][] descriptions) {
Map<Integer, TreeNode> m = new HashMap<>();
Set<Integer> vis = new HashSet<>();
for (int[] d : descriptions) {
int p = d[0], c = d[1], isLeft = d[2];
if (!m.containsKey(p)) {
m.put(p, new TreeNode(p));
}
if (!m.containsKey(c)) {
m.put(c, new TreeNode(c));
}
if (isLeft == 1) {
m.get(p).left = m.get(c);
} else {
m.get(p).right = m.get(c);
}
vis.add(c);
}
for (Map.Entry<Integer, TreeNode> entry : m.entrySet()) {
if (!vis.contains(entry.getKey())) {
return entry.getValue();
}
}
return null;
}
}C++
class Solution {
public:
TreeNode* createBinaryTree(vector<vector<int>>& A) {
unordered_map<TreeNode*, TreeNode*> parentMap; // map from child node pointer to parent node pointer
unordered_map<int, TreeNode*> m; // map from node value to node pointer
for (auto &v : A) {
int p = v[0], c = v[1], isLeft = v[2];
auto parent = m.count(p) ? m[p] : (m[p] = new TreeNode(p));
auto child = m.count(c) ? m[c] : (m[c] = new TreeNode(c));
if (isLeft) parent->left = child;
else parent->right = child;
parentMap[child] = parent;
}
auto root = m.begin()->second; // Pick a random node pointer and keep traversing up until the node doesn't have any parents
while (parentMap.count(root)) root = parentMap[root];
return root;
}
};
Comments
Post a Comment