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

  • 相关阅读:
    SpingMVC类型转换
    SpingMVC系统异常处理(二)
    JDBC 之 事务
    JDBC 基础概念
    部分实用的SQL语句
    JDBC基础学习
    手动去除集合中重复元素
    三种形式遍历集合
    java IO流 复制图片
    java IO流 之 字符流
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8987470.html
Copyright © 2011-2022 走看看