108. Convert Sorted Array to Binary Search Tree

由一个已经排序的数组构造二叉树,很容易就可以想到递归二分搜索,只是多了一个TreeNode的返回值。思路是每次取中间,再构造左右两边。

public TreeNode sortedArrayToBST(int[] nums) {
    return dfs(nums, 0, nums.length - 1);
}

public TreeNode dfs(int[] nums, int l, int r) {
    if (l > r) return null;
    int mid = (l + r) >>> 1;
    TreeNode root = new TreeNode(nums[mid]);
    root.left = dfs(nums, l, mid - 1);
    root.right = dfs(nums, mid + 1, r);
    return root;
}

第二种边界姿势,同二分法。但是这两种方法构造出的二叉树可能是不一样的,sorted数组只是代表了中序遍历,不能确定唯一的树。

public TreeNode sortedArrayToBST(int[] nums) {
    return dfs(nums, 0, nums.length);
}

public TreeNode dfs(int[] nums, int l, int r) {
    if (l >= r) return null;
    int mid = (l + r) >>> 1;
    TreeNode root = new TreeNode(nums[mid]);
    root.left = dfs(nums, l, mid);
    root.right = dfs(nums, mid + 1, r);
    return root;
}

results matching ""

    No results matching ""