1. 程式人生 > >leetcode108題:將有序陣列轉換為二叉搜尋樹

leetcode108題:將有序陣列轉換為二叉搜尋樹

 題目要求的是高度平衡的二叉搜尋樹,故每個節點應該取所在區間的中間節點。就跟二分查詢一樣。首先用整個數字的中間位置(下標基座mid)的數生成根結點root,然後找mid左邊即0到mid-1的中間位置的元素生成root的左子節點,mid右邊的即mid+1到len中間的生成root的右子節點,並在每一次區中間元素時修改區間範圍。以此類推,遞迴即可。

class Solution {
  public TreeNode sortedArrayToBST(int[] nums) {
        int len = nums.length;
        return fun(nums,0,len-1);
    }
	public TreeNode fun(int[] arr,int from,int to){
		if(from==to)
			return new TreeNode(arr[from]);
		if(from>to){
			return null;
		}
		int mid = (from+to)>>1;
		TreeNode root = new TreeNode(arr[mid]);
		root.left = fun(arr,from,mid-1);
		root.right = fun(arr,mid+1,to);
		return root;
	}
}

要注意的是,第二個終止條件,即from>to。這個條件寫不好會導致棧溢位(相當於進入死迴圈)。