题解 | #将升序数组转化为平衡二叉搜索树#
将升序数组转化为平衡二叉搜索树
http://www.nowcoder.com/practice/7e5b00f94b254da599a9472fe5ab283d
二叉平衡搜索树的中序遍历是升序数组
对中序序列而言,其中间存在一个根节点,根节点左侧为左子树,根节点右侧为右子树。
又由二叉平衡树左右子树,其高度差小于等于1,所以可以从升序序列中部寻找这个结点。
当找到这个结点后,以其左侧和右侧数组,再次构造二叉平衡树。
public TreeNode sortedArrayToBST (int[] num) {
// write code here
if(num == null || num.length == 0) {
return null;
}
return conduct(num, 0, num.length -1);
}
private TreeNode conduct(int[] num, int left, int right) {
if(left > right) {
return null;
}
if(left == right) {
return new TreeNode(num[left]);
}
int mid = (left + right + 1)/2;
TreeNode node = new TreeNode(num[mid]);
node.left = conduct(num, left, mid - 1);
node.right = conduct(num, mid + 1, right);
return node;
} 有一个关键点:int mid = (left + right + 1)/2;
由于数组下标从0️⃣开始,一个长度为奇数的数组,其中间结点下标为(首结点下标 + 尾结点下标 + 1)/2。
OPPO公司福利 1101人发布
