您的位置:首页 > 其它

177 - 排序数组转为二叉树

2017-04-06 09:16 197 查看
4.6

清明前做了一半的题目,今天做出来了。

学到几个小的点,计算log2 的时候 应该是 Math.log(n)/ Math.log(double(2)),还是很麻烦的。

这道题的想法就是,先算出最小的树高,然后就可以找到根节点的位置了。

/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param A: an integer array
* @return: a tree node
*/
public TreeNode sortedArrayToBST(int[] A) {
//TreeNode root = new TreeNode();
if(A.length == 0){
return null;
}
int low = 0;
int height = A.length -1;
return sortedArrayToBST1(A,low,height);
}
public TreeNode sortedArrayToBST1(int[] A,int low,int height) {
//TreeNode root = new TreeNode();
if(low > height){// write your code here
return null;
}
//TreeNode root = new TreeNode();
if(height == low){
TreeNode root = new TreeNode(A[low]);
return root;
}
//System.out.println("height:" + height +" low:" + low);
int level = (int)(Math.log(height - low +1)/Math.log((double)2));
//System.out.println("level:" + level);//高度减一
int flag = (int)Math.pow(2, level)-1;
//System.out.println("flag:" + flag);
TreeNode root = new TreeNode(A[low + flag]);
// System.out.println("root.val:" + root.val);
root.left = sortedArrayToBST1(A,low,low + flag-1);
root.right = sortedArrayToBST1(A,low + flag+1,height);//根节点的位置
return root;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐