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