数据结构--单调栈--构造数组的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的结点作为头结点,只有左边大的的作为左边结点的左孩子,只有右边结点大的作为右边结点的右孩子,左右比它大的都有的,选择两个中较小的,作为较小的结点的孩子

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