Convertanorderedarraytoabinarysearchtree题目描述:给定一个整数数组nums,其元素已经是升序排列,请将其转换为A高度平衡二叉搜索树。高度平衡二叉树是满足“各节点左右子树高度差的绝对值不超过1”的二叉树。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。解法一:递归根据二叉查找树的性质,由于给定的数组是按升序排列的,因此可以确定数组num为二叉查找树的中序遍历序列。为了得到一棵平衡二叉树,取数组中间的节点作为根节点。这样左右子树中的节点就比较均衡了。具体过程如下:调用递归方法,初始起始位置为数组长度;当起始位置大于结束位置时,表示该节点已经遍历完毕,直接返回空树;取中间位置的值作为根节点,使得左右子树的节点树比较平衡;然后递归获取当前根节点的左右子树;最后返回根节点为平衡二叉搜索树。导入com.kaesar.leetcode.TreeNode;publicclassLeetCode_108{publicstaticTreeNodesortedArrayToBST(int[]nums){//调用递归方法,初始起始位置为数组的长度returnsortedArrayToBST(nums,0,nums.length-1);}/***递归**@paramnums*@paramleft*@paramright*@return*/privatestaticTreeNodesortedArrayToBST(int[]nums,intleft,intright){//当起始位置大于到了结束位置,表示该节点遍历完毕,直接返回空树if(left>right){returnnull;}//获取中间位置的值作为根节点,使得左右子树的节点树更加均衡intmid=(left+right)/2;TreeNoderoot=newTreeNode(nums[mid]);//然后递归得到当前根节点的左右子树root.left=sortedArrayToBST(nums,left,mid-1);root.right=sortedArrayToBST(nums,mid+1,right);返回根;}publicstaticvoidmain(String[]args){int[]nums=newint[]{-10,-3,0,5,9};sortedArrayToBST(nums).print();}}【每日留言】不辜负每一个朝阳,不要浪费每一个深夜,因为平凡而奋斗,因为奋斗不平凡
