Create Binary Tree From Descriptions
给一个2d数组, 里面是一颗数, 用[parent, child, isleft]的形式表达, 求返回这个树.
这题建树不难, 找到root, 需要记录一下所有的parent, 因为只有一个root是不会成为别人的child的.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
/** * 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()); } } |