zoukankan      html  css  js  c++  java
  • 程序员面试金典-面试题 04.02. 最小高度树

    题目:

    给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。

    示例:
    给定有序数组: [-10,-3,0,5,9],

    一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:

      0
      /
     -3   9
     /     /
    -10  5

    分析:

    因为数组中元素已经有序,我们可以将数组中最中间的元素作为根节点,然后递归构建二分搜索树,当前结点的左子树由中间元素左边的的元素构成,右子树则由右边元素,递归构建即可。

    程序:

    /**
     * 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) {
            return insert(nums, 0, nums.length-1);
        }
        private TreeNode insert(int[] nums, int l, int r) {
            if(l > r)
                return null;
            if(l == r)
                return new TreeNode(nums[l]);
            int mid = l + (r - l) / 2;
            TreeNode node = new TreeNode(nums[mid]);
            node.left = insert(nums, l, mid-1);
            node.right = insert(nums, mid+1, r);
            return node;
        }
    
    }
  • 相关阅读:
    无废话XML--XML约束(DTD)
    无废话XML--XML细节
    XML,HTML,XHTML
    javabean内省
    反射应用--IOC和AOP
    JDK动态代理
    反射
    类加载机制
    linkin大话数据结构--泛型
    java异常处理
  • 原文地址:https://www.cnblogs.com/silentteller/p/12426353.html
Copyright © 2011-2022 走看看