数据结构--单调栈--构造数组的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遍历并实现前序/中序/后序