题目描述
思路
比较简答的一道模拟题。descriptions[i][0]是父节点,descriptions[i][1]是子节点,description[i][2]指示左子节点或右子节点。
对description进行遍历,如果不存在父(子)节点,则new一个,否则从HashMap中get。
代码
class Solution {
public TreeNode createBinaryTree(int[][] descriptions) {
HashMap< Integer , TreeNode > hs = new HashMap();
int len = descriptions.length;
for( int i = 0 ; i < len ; i++ ){
TreeNode son = null;
if( !hs.containsKey( descriptions[i][1] ) ){
son = new TreeNode( descriptions[i][1] );
hs.put( descriptions[i][1] , son );
}
else{
son = hs.get( descriptions[i][1] );
}
TreeNode father = null;
if( !hs.containsKey( descriptions[i][0] ) ){
father = new TreeNode( descriptions[i][0] );
hs.put( descriptions[i][0] , father );
}
else{
father = hs.get( descriptions[i][0] );
}
if( descriptions[i][2]==1 ) father.left = son;
else father.right = son;
}
for( int i = 0 ; i < len ; i++ ){
hs.remove( descriptions[i][1] );
}
for( int i : hs.keySet() ){
return hs.get( i );
}
return null;
}
}
思考
看完了题解评论区的大佬,对于description这种命名已经很长的数组,自己的命名可以简洁一些,增强可读性。