码迷,mamicode.com
首页 > 其他好文 > 详细

Max Tree

时间:2016-06-15 23:46:56      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:

Given an integer array with no duplicates. A max tree building on this array is defined as follow:

  • The root is the maximum number in the array
  • The left subtree and right subtree are the max trees of the subarray divided by the root number.

Construct the max tree by the given array.

这是lintcode上的一题,每次先确定根结点最大值,然后根据根结点再分割左右两边,然后继续。按照描述是一个递归过程。但是直接用递归是O(nlogn)的平均复杂度,最坏复杂度为O(n^2),即为有序数组时,这题用递归解法在Lintcode上直接爆栈。

所有需要时间和空间复杂度都为O(n)的解法,仔细分析下这题,给出的数组实际是max-tree的一个中序遍历。

每个结点的父结点都比结点值要大,并且结合中序遍历的性质,如果结点为父结点的左孩子,则在数组中是[结点...父结点]这样的顺序,而如果是右结点,则在数组中是[父结点...结点]这样的顺序。而省略号代表的是结点自己的右子树序列(结点为父结点的左孩子的情况),结点自己的左子树序列(结点为父结点的左孩子的情况),所以...的内容中都是比结点值小的。所以结点的父结点是其左边或者右边第一个比它大的值。在结点是父结点的左右孩子的情况下,如何确定父亲结点是哪个呢。按照推理我们选择其中比较小的那个。

Max Tree

标签:

原文地址:http://www.cnblogs.com/sherylwang/p/5589390.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!