Create Binary Tree From Descriptions

给一个2d数组, 里面是一颗数, 用[parent, child, isleft]的形式表达, 求返回这个树.

这题建树不难, 找到root, 需要记录一下所有的parent, 因为只有一个root是不会成为别人的child的.

/**
 * 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;
 *     }
 * }
 */
class Solution {
    public TreeNode createBinaryTree(int[][] descriptions) {
        Map<Integer, TreeNode> map = new HashMap<>();
        Set<Integer> set = new HashSet<>(); // use to find the root;
        for(int[] d : descriptions){
            TreeNode node = map.getOrDefault(d[0], new TreeNode(d[0]));
            TreeNode child = map.getOrDefault(d[1], new TreeNode(d[1]));
            if(d[2] == 1){
                node.left = child;
            }
            else
            {
                node.right = child;
            }
            map.put(d[0], node);
            map.put(d[1], child);
            set.add(d[0]);
        }
        for(int[] d : descriptions){
            set.remove(d[1]);
        }
        return map.get(set.iterator().next());
    }
}