标签:creat height 二分查找树 构建 中间 uil turn attr coding
Given a sorted(increasing order) array with unique integer elements, write an algorithm to create a binary search tree with minimal height.
这道题给了我们一个从小到大排好序的元素不重复的数组,让我们构建一个有最小高度的二分查找树。有两个限制条件,二分查找和最小高度。我们先来看如何树的高度最小,这里就要涉及到平衡二叉树的概念。我们要保证每个node的左右子树的高度差绝对值不超过1。第二个限制条件是这个树是二分查找树,也就是要保证每个node的值大于等于其左子树的最大值,小于其右子树的的最小值。如何根据这两个条件构建一颗minimal tree呢?我们一开始可以从数组中取中间的值作为root,然后将数组一分为二,然后用同样的方法对左半部分和右半部分做同样的递归操作。见如下代码:
class Node attr_accessor :val, :left, :right def initialize(val) @val = val @left = nil @right = nil end end def build(nums) return nil if nums.nil? || nums.empty? mid = nums.length / 2 root = Node.new(nums[mid]) left = build(nums[0...mid]) right = build(nums[mid + 1..-1]) root.left = left root.right = right root end root = build([1,2,3,4,5,6]) # inorder traverse一下树来验证一下 def inorder_traversal(root) return if root.nil? inorder_traversal(root.left) puts root.val inorder_traversal(root.right) end inorder_traversal(root)
[Cracking the Coding Interview] 4.2 Minimal Tree 最小树
标签:creat height 二分查找树 构建 中间 uil turn attr coding
原文地址:https://www.cnblogs.com/infinitycoder/p/9185771.html