Java代码
class Solution {
public TreeNode createBinaryTree(int[][] descriptions) {
HashMap<Integer, TreeNode> hashMap = new HashMap<Integer, TreeNode>();
HashMap<Integer, Boolean> hashbool = new HashMap<Integer, Boolean>();
TreeNode root = null;
for(int i = 0;i < descriptions.length;i++){
TreeNode node = null;
if(!hashMap.containsKey(descriptions[i][0])){
node = new TreeNode(descriptions[i][0]);
hashMap.put(descriptions[i][0], node);
hashbool.put(descriptions[i][0], false);
}else{
node = hashMap.get(descriptions[i][0]);
}
if(descriptions[i][2] == 1){
if(!hashMap.containsKey(descriptions[i][1])){
node.left = new TreeNode(descriptions[i][1]);
hashMap.put(descriptions[i][1], node.left);
hashbool.put(descriptions[i][1], true);
}else{
node.left = hashMap.get(descriptions[i][1]);
hashbool.replace(descriptions[i][1], false, true);
}
}else{
if(!hashMap.containsKey(descriptions[i][1])){
node.right = new TreeNode(descriptions[i][1]);
hashMap.put(descriptions[i][1], node.right);
hashbool.put(descriptions[i][1], true);
}else{
node.right = hashMap.get(descriptions[i][1]);
hashbool.replace(descriptions[i][1], false, true);
}
}
}
for(Map.Entry<Integer, Boolean> entry : hashbool.entrySet()){
if(entry.getValue() == false){
root = hashMap.get(entry.getKey());
}
}
return root;
}
}
解题思路
这题总共就两个部分一个建树,一个是找到树的根节点。
建树没什么好说的,通过一个hashmap记录已经创建的treenode
找到树的根节点可以通过“标记”方法,我们将所有的孩子节点进行标记,最后没有被标记的就是root了
标记的流程可以放到建树里面,这就是整个流程了。