zoukankan      html  css  js  c++  java
  • 108. Convert Sorted Array to Binary Search Tree

    题目:

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

    链接: http://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/

    题解:

    排序好的数组转换为BST, 找中点即可。

    Time Complexity - O(n), Space Complexity - O(n)。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public TreeNode sortedArrayToBST(int[] nums) {
            if(nums == null || nums.length == 0)
                return null;
            return sortedArrayToBST(nums, 0, nums.length - 1);
        }
        
        private TreeNode sortedArrayToBST(int[] nums, int lo, int hi) {
            if(lo > hi)
                return null;
            int mid = lo + (hi - lo) / 2;
            TreeNode root = new TreeNode(nums[mid]);
            root.left = sortedArrayToBST(nums, lo, mid - 1);
            root.right = sortedArrayToBST(nums, mid +1, hi);
            return root;
        } 
    }

    二刷:

    一刷代码比较简洁,不像自己写的...

    主要我们就是利用一个辅助方法,使用二分法来自顶向下递归构建树。也可以使用自底向上,另外一题Convert Sorted List to BST就适合用自底向上方法。

    Java:

    Time Complexity - O(n), Space Complexity - O(n)。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public TreeNode sortedArrayToBST(int[] nums) {
            if (nums == null || nums.length == 0) return null;
            return buildTree(nums, 0, nums.length - 1);
        }
        
        private TreeNode buildTree(int[] nums, int lo, int hi) {
            if (lo > hi) return null;
            int mid = lo + (hi - lo) / 2;
            TreeNode node = new TreeNode(nums[mid]);
            node.left = buildTree(nums, lo, mid - 1);
            node.right = buildTree(nums, mid + 1, hi);
            return node;
        }
    }

    测试:

  • 相关阅读:
    U8g2库I2C总线再次突破性调试成功
    要学的东西太多了,还想学习opencv
    中断知识
    别人做的扫地机器人,有机会我也想搞一台!
    团队冲刺第五天
    第八周学习进度
    团队冲刺第四天
    构建之法1
    团队冲刺第三天
    团队冲刺第二天
  • 原文地址:https://www.cnblogs.com/yrbbest/p/4437315.html
Copyright © 2011-2022 走看看