Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
专门查了一下什么是height balanced BST. 介绍中还有提供插入该树的方法, 在插入过程中需要检查时是否平衡, 如果不平衡整个树需要重新部署. 幸而该题目提供的array已经排序, 于是只需要每次提取子数组中间的元素值即可作为当前节点值进而构造树节点.
首先, 构造binary tree本能反应递归. 每次递归创建一个节点: 该节点值为子数组中值, 该节点左子节点和右子节点可以通过调用递归得到.
于是递归参数为数组, 子数组左指针, 子数组右指针
递归返回为一个树节点
递归出口判断为数组左指针大于右指针
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode sortedArrayToBST(int[] num) {
if(num.length == 0) return null;
int left = 0;
int right = num.length-1;
TreeNode root = buildBST(num, left, right);
return root;
}
public TreeNode buildBST(int[] num, int left, int right){
int mid = (left+right)/2;
if(left<=right) {
TreeNode node = new TreeNode(num[mid]);
node.left = buildBST(num, left, mid-1);
node.right = buildBST(num, mid+1, right);
return node;
}
return null;
}
}