g2101_2200.s2196_create_binary_tree_from_descriptions.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g2101_2200.s2196_create_binary_tree_from_descriptions;
// #Medium #Array #Hash_Table #Depth_First_Search #Breadth_First_Search #Tree #Binary_Tree
// #2022_06_06_Time_85_ms_(76.70%)_Space_120.3_MB_(19.49%)
import com_github_leetcode.TreeNode;
import java.util.HashMap;
import java.util.Map;
/*
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
/**
* 2196 - Create Binary Tree From Descriptions\.
*
* Medium
*
* You are given a 2D integer array `descriptions` where descriptions[i] = [parenti, childi, isLefti]
indicates that parenti
is the **parent** of childi
in a **binary** tree of **unique** values. Furthermore,
*
* * If isLefti == 1
, then childi
is the left child of parenti
.
* * If isLefti == 0
, then childi
is the right child of parenti
.
*
* Construct the binary tree described by `descriptions` and return _its **root**_.
*
* The test cases will be generated such that the binary tree is **valid**.
*
* **Example 1:**
*
* ![](https://assets.leetcode.com/uploads/2022/02/09/example1drawio.png)
*
* **Input:** descriptions = \[\[20,15,1],[20,17,0],[50,20,1],[50,80,0],[80,19,1]]
*
* **Output:** [50,20,80,15,17,19]
*
* **Explanation:** The root node is the node with value 50 since it has no parent.
*
* The resulting binary tree is shown in the diagram.
*
* **Example 2:**
*
* ![](https://assets.leetcode.com/uploads/2022/02/09/example2drawio.png)
*
* **Input:** descriptions = \[\[1,2,1],[2,3,0],[3,4,1]]
*
* **Output:** [1,2,null,null,3,4]
*
* **Explanation:** The root node is the node with value 1 since it has no parent.
*
* The resulting binary tree is shown in the diagram.
*
* **Constraints:**
*
* * 1 <= descriptions.length <= 104
* * `descriptions[i].length == 3`
* * 1 <= parenti, childi <= 105
* * 0 <= isLefti <= 1
* * The binary tree described by `descriptions` is valid.
**/
public class Solution {
public TreeNode createBinaryTree(int[][] descriptions) {
Map map = new HashMap<>();
for (int[] description : descriptions) {
Data data = map.get(description[0]);
if (data == null) {
data = new Data();
data.node = new TreeNode(description[0]);
data.isHead = true;
map.put(description[0], data);
}
Data childData = map.get(description[1]);
if (childData == null) {
childData = new Data();
childData.node = new TreeNode(description[1]);
map.put(childData.node.val, childData);
}
childData.isHead = false;
if (description[2] == 1) {
data.node.left = childData.node;
} else {
data.node.right = childData.node;
}
}
for (Map.Entry entry : map.entrySet()) {
if (entry.getValue().isHead) {
return entry.getValue().node;
}
}
return null;
}
private static class Data {
TreeNode node;
boolean isHead;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy