一、算法描述
给定一个数组,如何以数组中的元素生成二叉搜索树?要解决这个问题首先我们需要理解二叉搜索树的定义:
1.节点的左子树只包含小于当前节点的数。
2.节点的右子树只包含大于当前节点的数
3.所有左子树和右子树自身必须也是二叉搜索树。
从二叉搜索树的定义可以看出,其构成是含有递归的思想,所以从代码的实现上可以通过递归左右子树来实现。平衡搜索二叉树是指在二叉搜索树的接触上左右子树的高度差不超过1。
以一个例子来解释:给定数组 [-10,-3,0,5,9],基于这个升序数组生成平衡的二叉搜索树,结果如下所示:
给定二叉搜索树,通过中序遍历就可以得到升序数组,反过来,当给定升序数组,就可以按照中序遍历的方式获得二叉搜索树。
二、JAVA 实现
public TreeNode sortedArrayToBST(int[] nums) {
return backsortedArrayToBST(nums,0,nums.length-1);
}
public TreeNode backsortedArrayToBST(int[] nums,int left,int right){
if (left>right)
return null;
int index=(left+right)/2;
TreeNode node=new TreeNode(nums[index]);
node.left=backsortedArrayToBST(nums,left,index-1);
node.right=backsortedArrayToBST(nums,index+1,right);
return node;
}
总结
在对树进行操作的时候,递归是一种可能的较为高效的解决方案,这是由树本身的定义决定的(左右子节点相对于下一层节点也是父节点)。