將一個按照升序排列的有序數組,轉換為一棵高度平衡二叉搜索樹。
本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。
示例:
給定有序數組: [-10,-3,0,5,9], 一個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜索樹: 0 / \ -3 9 / / -10 5
可以發現規律:
0 / \ -3 9
每一個根結點都是三個結點的中值。 探索二叉樹我們選擇用中序遍歷。
根據條件:遞增數組,選取中值,我們可以采用二分法,nums[mid]就是中間結點,按照此方法同時可以解決平衡問題。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode sortedArrayToBST(int[] nums) { return sortedArrayToBST(nums,0,nums.length-1); } public TreeNode sortedArrayToBST(int [] nums,int left,int right){ if(left>right)return null; //邊界條件,注意是left>right int mid=(left+right)/2; TreeNode root=new TreeNode(nums[mid]); root.left=sortedArrayToBST(nums,left,mid-1); //遞歸向左探索,范圍變成left~mid-1; root.right=sortedArrayToBST(nums,mid+1,right); return root; } }