leetcode108題:將有序陣列轉換為二叉搜尋樹
阿新 • • 發佈:2018-12-26
題目要求的是高度平衡的二叉搜尋樹,故每個節點應該取所在區間的中間節點。就跟二分查詢一樣。首先用整個數字的中間位置(下標基座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。這個條件寫不好會導致棧溢位(相當於進入死迴圈)。