码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构--单调栈--构造数组的MaxTree

时间:2018-05-03 22:08:22      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:树节点   nts   tree   复杂   利用   空间复杂度   最大   null   左右   

定义二叉树节点如下:

public class Node {
        public int value;
        public Node left;
        public Node right;
        public Node(int data) {
            this.value = data;
        }
    }

  

一个数组的MaxTree定义如下。
数组必须没有重复元素。
MaxTree是一棵二叉树, 数组的每一个值对应一个二叉树节点。
包括MaxTree树在内且在其中的每一棵子树上, 值最大的节点都是树的头。
给定一个没有重复元素的数组arr, 写出生成这个数组的MaxTree的函数, 要求如果数组长度为N, 则时间复杂度为O(N)、 额外空间复杂度为O(N)。

 

解法一:可以利用堆,构造堆的时间复杂度是O(N)

解法二:利用单调栈求出数组中每个位置左右最近的比它大的值,然后让左右都为null的结点作为头结点,只有左边大的的作为左边结点的左孩子,只有右边结点大的作为右边结点的右孩子,左右比它大的都有的,选择两个中较小的,作为较小的结点的孩子

 

数据结构--单调栈--构造数组的MaxTree

标签:树节点   nts   tree   复杂   利用   空间复杂度   最大   null   左右   

原文地址:https://www.cnblogs.com/SkyeAngel/p/8987470.html

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