LeetCode:108. 將有序陣列轉換為二叉搜尋樹(Java)
阿新 • • 發佈:2019-02-20
題目:
將一個按照升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。
本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。
給定有序陣列: [-10,-3,0,5,9],
一個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜尋樹:
0
/ \
-3 9
/ /
-10 5
解答:
這個題有點類似二分查詢,根節點在正中間,左子樹的根節點在左邊一半陣列的正中間,右子樹的根節點在右邊一半陣列的正中間;於是可以遞迴解決:先確定根節點,然後構造左子樹,然後構造右子樹, 結束條件類似二分查詢(low > high)。
/** * 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) { if (nums == null) { return null; } return convertTree(nums, 0, nums.length - 1); } private TreeNode convertTree(int[] nums, int l, int r) {//l:陣列左邊;r:陣列右邊,包括l和r if (l <= r) { int mid = (l + r) / 2; TreeNode newNode = new TreeNode(nums[mid]); newNode.left = convertTree(nums, l, mid - 1); newNode.right = convertTree(nums, mid + 1, r); return newNode; } else { return null; } } }