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

Posted SkyeAngel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构--单调栈--构造数组的MaxTree相关的知识,希望对你有一定的参考价值。

定义二叉树节点如下:

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的主要内容,如果未能解决你的问题,请参考以下文章

《程序员面试指南》第一章 栈和队列 构造数组的MaxTree

算法进阶面试题03——构造数组的MaxTree最大子矩阵的大小2017京东环形烽火台问题介绍Morris遍历并实现前序/中序/后序

左神算法进阶班3_1构造数组的MaxTree

[单调栈] aw3780. 构造数组(递推+单调栈+枚举+aw周赛009_3)

AcWing 构造数组(单调栈)

3780. 构造数组 (单调栈)