510,将有序数组转换为二叉搜索树
Opportunity does not knock, it presents itself when you beat down the door. 机遇不会自己找上门来,它只会在你开门时出现。 问题描述 将一个按照 升序排列的有序数组 ,转换为一棵高度平衡二叉搜索树。 本题中, 一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1 。 示例: 给定有序数组: [ -10 , -3 , 0 , 5 , 9 ], 一个可能的答案是:[ 0 , -3 , 9 , -10 , null , 5 ], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 递归方式解决 题中说了要转换为一棵高度平衡的二叉搜索树,并且数组又是排过序的,这就好办了。 我们可以使用递归的方式,每次取数组 中间的值 比如m作为当前节点,m前面的值都是比他小的,作为他左子树的结点值。m后面的值都是比他大的,作为他右子树的节点值,示例中一个可能的结果是。 代码如下 1 public TreeNode sortedArrayToBST( int [] num ) { 2 //边界条件判断 3 if ( num .length == 0 ) 4 return null ; 5 return sortedArrayToBST( num , 0 , num