单调栈

单调栈

一、什么是单调栈?

单调栈(Monotonic Stack)是一种特殊的栈,在栈的「先进后出」基础上,要求「从栈顶到栈底的元素是单调的(递增或递减)」。

与普通栈不同,单调栈的元素是按照特定的单调性(递增或递减)排列的:

1
2
3
4
5
6
7
 普通栈        单调栈

| | | |
| | | |
| 3 | | 1 | <-- 栈顶
| 1 | | 2 |
|__2__| |__3__| <-- 栈底

按照单调栈的元素是按照特定的单调性,可分为两种类型:

 二叉搜索树

二叉搜索树

一、结构定义

二叉搜索树(binary search tree),也称为二叉查找树,是一种二叉树,同时还满足了以下的条件:

  1. 对于根节点,左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值
  2. 任意节点的左、右子树也是二叉搜索树

相比于普通二叉树,二叉搜索树的节点之间带有大小关系,这使得二叉搜索树可以支持快速的查找、插入、删除操作。

 索引堆

索引堆

一、什么是索引堆?

索引堆(Index Heap)是二叉堆的一个变种,是二叉堆的一种增强。

相比于二叉堆只能访问堆顶元素,索引堆可以通过索引访问堆中的任意元素。

比如下面的索引堆:

1
2
3
4
5
      1(30)      
/ \
4(28) 3(16)
\ /
5(22) 2(12)

除了可以直接访问堆顶元素 30,还可以通过索引访问其他元素: