# JStructure
JavaScript 版本的数据结构，提供常用的数据结构封装，基于清华大学邓俊辉老师的数据结构课程

[![Build status](https://travis-ci.com/open-node/jstructures.svg?branch=master)](https://travis-ci.org/open-node/jstructures)
[![codecov](https://codecov.io/gh/open-node/jstructures/branch/master/graph/badge.svg)](https://codecov.io/gh/open-node/jstructures)

# 进度
* [x] List (linked-list)
* [x] Vector
* [x] Stack
* [x] Queue
* [x] SegmentTree
* [x] UnionFind
* [x] BinTree
  * [x] BST (BinanySearchTree)
  * [ ] BTree
* [x] Trie
* [ ] Graph
* [x] Heap
  * [ ] LeftHeap
* [ ] Priority Queue



<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

### Table of Contents



<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

### Table of Contents

-   [AVL][1]
    -   [insert][2]
        -   [Parameters][3]
    -   [remove][4]
        -   [Parameters][5]
    -   [balanced][6]
        -   [Parameters][7]
    -   [AVLBalanced][8]
        -   [Parameters][9]
    -   [balFac][10]
        -   [Parameters][11]
    -   [height][12]
        -   [Parameters][13]
-   [BST][14]
    -   [search][15]
        -   [Parameters][16]
    -   [insert][17]
        -   [Parameters][18]
    -   [remove][19]
        -   [Parameters][20]
    -   [removeAt][21]
        -   [Parameters][22]
    -   [searchIn][23]
        -   [Parameters][24]
-   [BinNode][25]
    -   [Parameters][26]
    -   [data][27]
    -   [parent][28]
    -   [lc][29]
    -   [rc][30]
    -   [height][31]
    -   [size][32]
    -   [isRoot][33]
    -   [isLChild][34]
    -   [isRChild][35]
    -   [hasParent][36]
    -   [hasLChild][37]
    -   [hasRChild][38]
    -   [hasChild][39]
    -   [hasBothChild][40]
    -   [isLeaf][41]
    -   [sibling][42]
    -   [uncle][43]
    -   [fromParentTo][44]
    -   [pred][45]
    -   [succ][46]
    -   [insertAsLC][47]
        -   [Parameters][48]
    -   [insertAsRC][49]
        -   [Parameters][50]
    -   [travLevel][51]
        -   [Parameters][52]
    -   [travPre][53]
        -   [Parameters][54]
    -   [travIn][55]
        -   [Parameters][56]
    -   [travPost][57]
        -   [Parameters][58]
    -   [swap][59]
        -   [Parameters][60]
-   [BinTree][61]
    -   [size][62]
    -   [size][63]
        -   [Parameters][64]
    -   [empty][65]
    -   [root][66]
    -   [root][67]
        -   [Parameters][68]
    -   [updateHeightAbove][69]
        -   [Parameters][70]
    -   [insertAsRoot][71]
        -   [Parameters][72]
    -   [insertAsLC][73]
        -   [Parameters][74]
    -   [insertAsRC][75]
        -   [Parameters][76]
    -   [attachAsLC][77]
        -   [Parameters][78]
    -   [attachAsRC][79]
        -   [Parameters][80]
    -   [remove][81]
        -   [Parameters][82]
    -   [secede][83]
        -   [Parameters][84]
    -   [travLevel][85]
        -   [Parameters][86]
    -   [travPre][87]
        -   [Parameters][88]
    -   [travIn][89]
        -   [Parameters][90]
    -   [travPost][91]
        -   [Parameters][92]
-   [Heap][93]
    -   [Parameters][94]
    -   [size][95]
    -   [percolateUp][96]
        -   [Parameters][97]
    -   [percolateDown][98]
        -   [Parameters][99]
    -   [insert][100]
        -   [Parameters][101]
    -   [getMax][102]
    -   [delMax][103]
        -   [Parameters][104]
-   [properParent][105]
    -   [Parameters][106]
-   [ListNode][107]
    -   [Parameters][108]
    -   [insertAsSucc][109]
        -   [Parameters][110]
    -   [insertAsPred][111]
        -   [Parameters][112]
-   [List][113]
    -   [Parameters][114]
    -   [size][115]
    -   [first][116]
    -   [last][117]
    -   [insertAsFirst][118]
        -   [Parameters][119]
    -   [insertAsLast][120]
        -   [Parameters][121]
    -   [insertA][122]
        -   [Parameters][123]
    -   [insertB][124]
        -   [Parameters][125]
    -   [remove][126]
        -   [Parameters][127]
    -   [disordered][128]
    -   [findElem][129]
        -   [Parameters][130]
    -   [search][131]
        -   [Parameters][132]
    -   [deduplicate][133]
    -   [uniquify][134]
    -   [traverse][135]
        -   [Parameters][136]
    -   [valid][137]
        -   [Parameters][138]
    -   [selectMax][139]
        -   [Parameters][140]
    -   [insertionSort][141]
        -   [Parameters][142]
    -   [selectionSort][143]
        -   [Parameters][144]
    -   [merge][145]
        -   [Parameters][146]
    -   [mergeSort][147]
        -   [Parameters][148]
-   [Queue][149]
    -   [enqueue][150]
        -   [Parameters][151]
    -   [dequeue][152]
    -   [front][153]
    -   [empty][154]
    -   [size][155]
-   [SegmentTree][156]
    -   [Parameters][157]
    -   [size][158]
    -   [leftChild][159]
        -   [Parameters][160]
    -   [rightChild][161]
        -   [Parameters][162]
    -   [build][163]
        -   [Parameters][164]
    -   [query][165]
        -   [Parameters][166]
    -   [update][167]
        -   [Parameters][168]
-   [Stack][169]
    -   [push][170]
        -   [Parameters][171]
    -   [pop][172]
    -   [top][173]
    -   [empty][174]
    -   [size][175]
-   [Trie][176]
    -   [size][177]
    -   [root][178]
    -   [insert][179]
        -   [Parameters][180]
    -   [find][181]
        -   [Parameters][182]
-   [UnionFind][183]
    -   [Parameters][184]
    -   [find][185]
        -   [Parameters][186]
    -   [union][187]
        -   [Parameters][188]
    -   [isConnected][189]
        -   [Parameters][190]
    -   [toString][191]
-   [Vector][192]
    -   [Parameters][193]
    -   [size][194]
    -   [insert][195]
        -   [Parameters][196]
    -   [removeRange][197]
        -   [Parameters][198]
    -   [remove][199]
        -   [Parameters][200]
    -   [disordered][201]
    -   [findElem][202]
        -   [Parameters][203]
    -   [search][204]
        -   [Parameters][205]
    -   [deduplicate][206]
    -   [uniquify][207]
    -   [traverse][208]
        -   [Parameters][209]
    -   [binSearch][210]
        -   [Parameters][211]
    -   [bubbleSort][212]
        -   [Parameters][213]
    -   [merge][214]
        -   [Parameters][215]
    -   [mergeSort][216]
        -   [Parameters][217]

## AVL

**Extends BST**

AVL 类(AVL 树, 继承自 BST)

Returns **[AVL][218]** Instance

### insert

插入元素

#### Parameters

-   `e` **Anyone** 要插入的数据元素

Returns **[BinNode][219]** 

### remove

删除元素, 注意是删除节点，非节点为根的子树

#### Parameters

-   `e` **Anyone** 要插入的数据元素

Returns **[Boolean][220]** 是否成功删除

### balanced

判断某个节点是否理想平衡即：左右高度相等

#### Parameters

-   `x`  
-   `要判断的节点` **[BinNode][219]** 

Returns **[Boolean][220]** 

### AVLBalanced

判断某个节点是否AVL平衡即：-2&lt;左高度-右高度&lt;2

#### Parameters

-   `x`  
-   `要判断的节点` **[BinNode][219]** 

Returns **[Boolean][220]** 

### balFac

获取节点的平衡因子 x.lc.height - x.rc.height;

#### Parameters

-   `x`  
-   `要判断的节点` **[BinNode][219]** 

Returns **[number][221]** 左子树高度和右子树高度的差值

### height

获取节点的高度

#### Parameters

-   `x`  
-   `要判断的节点` **[BinNode][219]** 

Returns **[number][221]** 节点高度，空树高 -1， 叶子高 0

## BST

**Extends BinTree**

BST 类(二叉搜索树类, 继承自 BinTree)

Returns **[BST][222]** Instance

### search

查找元素 e 所在的节点

#### Parameters

-   `e` **Anyone** 要搜索的元素

Returns **\[[BinNode][219]]** 返回两项，第一项是搜索命中的节点，第二项是命中节点的父节点

### insert

插入元素

#### Parameters

-   `e` **Anyone** 要插入的数据元素

Returns **[BinNode][219]** 

### remove

删除元素, 注意是删除节点，非节点为根的子树

#### Parameters

-   `e` **Anyone** 要插入的数据元素

Returns **[Boolean][220]** 是否成功删除

### removeAt

删除某个节点

#### Parameters

-   `x` **[BinNode][219]** 要删除的节点

Returns **[BinNode][219]** 返回接替者

### searchIn

以 v 为根节点查找元素 e 所在的节点

#### Parameters

-   `v` **[BinNode][219]** 要搜索的树的根节点
-   `e` **Anyone** 要搜索的元素
-   `parent`  
-   `p` **[BinNode][219]** 当前搜索节点的父节点

Returns **\[[BinNode][219]]** 返回两项，第一项是搜索命中的节点，第二项是命中节点的父节点

## BinNode

BinNode 类(二叉树节点类)

### Parameters

-   `e` **Anyone**  (optional, default `null`)
-   `parent` **[BinNode][219]** 父节点 (optional, default `null`)
-   `lc` **[BinNode][219]** 左子节点 (optional, default `null`)
-   `rc` **[BinNode][219]** 右子节点 (optional, default `null`)

Returns **[BinNode][219]** Instance

### data

节点存储数据

### parent

父节点

### lc

左子节点

### rc

右子节点

### height

以该节点为根的树高度

### size

节点为根的子树规模

Returns **[Boolean][220]** 

### isRoot

判断是否是根节点

Returns **[Boolean][220]** 

### isLChild

判断是否是左子节点

Returns **[Boolean][220]** 

### isRChild

判断是否是右子节点

Returns **[Boolean][220]** 

### hasParent

判断是否有父节点

Returns **[Boolean][220]** 

### hasLChild

判断是有左子节点

Returns **[Boolean][220]** 

### hasRChild

判断是有左子节点

Returns **[Boolean][220]** 

### hasChild

判断是有子节点

Returns **[Boolean][220]** 

### hasBothChild

判断是有完整子节点 (即左右子节点都有)

Returns **[Boolean][220]** 

### isLeaf

判断是否是叶子节点(没有子节点)

Returns **[Boolean][220]** 

### sibling

兄弟节点

Returns **[BinNode][219]** 

### uncle

叔叔节点(即父节点的兄弟节点)

Returns **[BinNode][219]** 

### fromParentTo

获取来自父节点的引用

Returns **[Array][223]** [object, key]

### pred

获取中序遍历下的直接前驱

Returns **[BinNode][219]** 返回前驱节点，不存在则返回 null

### succ

获取中序遍历下的直接后继

Returns **[BinNode][219]** 返回后继节点，不存在则返回 null

### insertAsLC

将元素作为左子节点插入

#### Parameters

-   `e` **Anyone** 

Returns **[BinNode][219]** 返回插入额节点

### insertAsRC

将元素作为右子节点插入

#### Parameters

-   `e` **Anyone** 

Returns **[BinNode][219]** 返回插入额节点

### travLevel

当前节点作为根节点的子树层次遍历 BFS

#### Parameters

-   `p`  
-   `visit`  
-   `访问函数` **[function][224]** 

Returns **void** 

### travPre

当前节点作为根节点的子树前序遍历 DFS

#### Parameters

-   `p` **[BinNode][219]** 遍历的节点
-   `visit`  
-   `访问函数` **[function][224]** 

Returns **void** 

### travIn

当前节点作为根节点的子树中序遍历 DFS

#### Parameters

-   `p` **[BinNode][219]** 遍历的节点
-   `visit`  
-   `访问函数` **[function][224]** 

Returns **void** 

### travPost

当前节点作为根节点的子树后序遍历 DFS

#### Parameters

-   `p` **[BinNode][219]** 遍历的节点
-   `visit`  
-   `访问函数` **[function][224]** 

Returns **void** 

### swap

交换量几个节点的数据

#### Parameters

-   `node1` **[BinNode][219]** 要交换的节点1
-   `node2` **[BinNode][219]** 要交换的节点2

Returns **void** 

## BinTree

BinTree 类(二叉树类)

Returns **[BinTree][225]** Instance

### size

树的规模

Returns **[number][221]** 

### size

更新树的规模

#### Parameters

-   `num`  

Returns **[number][221]** 

### empty

树是否为空

Returns **[Boolean][220]** 

### root

树根节点

Returns **[BinNode][219]** 

### root

重置根节点

#### Parameters

-   `_root`  

Returns **[BinNode][219]** 

### updateHeightAbove

更新节点以及祖先节点的高度

#### Parameters

-   `p` **[BinNode][219]** 要更新的节点

Returns **[number][221]** 返回更新后的高度

### insertAsRoot

作为树根节点插入

#### Parameters

-   `e` **Anyone** 要插入的数据元素

Returns **[BinNode][219]** 

### insertAsLC

作为节点的左孩子插入

#### Parameters

-   `p` **[BinNode][219]** 要插入的位置
-   `e` **Anyone** 要插入的数据元素

Returns **[BinNode][219]** 

### insertAsRC

作为节点的右孩子插入

#### Parameters

-   `p` **[BinNode][219]** 要插入的位置
-   `e` **Anyone** 要插入的数据元素

Returns **[BinNode][219]** 

### attachAsLC

作为节点的左孩子接入子树

#### Parameters

-   `p` **[BinNode][219]** 要插入的位置
-   `s` **[BinTree][225]** 要接入的数

Returns **[BinNode][219]** 

### attachAsRC

作为节点的右孩子接入子树

#### Parameters

-   `p` **[BinNode][219]** 要插入的位置
-   `s` **[BinTree][225]** 要接入的数

Returns **[BinNode][219]** 

### remove

删除某个节点作为根的子树

#### Parameters

-   `p` **[BinNode][219]** 要删除的根节点

Returns **[number][221]** 返回删除节点的总个数

### secede

分离某个节点作为根的子树

#### Parameters

-   `p` **[BinNode][219]** 要删除的根节点

Returns **[BinTree][225]** 返回分离出来的子树

### travLevel

树的层次遍历

#### Parameters

-   `visit`  
-   `访问函数` **[function][224]** 

Returns **void** 

### travPre

树的前序遍历

#### Parameters

-   `visit`  
-   `访问函数` **[function][224]** 

Returns **void** 

### travIn

树的中序遍历

#### Parameters

-   `visit`  
-   `访问函数` **[function][224]** 

Returns **void** 

### travPost

树的后序遍历

#### Parameters

-   `visit`  
-   `访问函数` **[function][224]** 

Returns **void** 

## Heap

Heap 堆

### Parameters

-   `elems`   (optional, default `[]`)
-   `length`   (optional, default `0`)

Returns **[Heap][226]** Instance

### size

获取堆的大小

Returns **[number][221]** 

### percolateUp

元素上滤操作

#### Parameters

-   `i` **[Number][221]** 上滤的元素索引

Returns **[Number][221]** 上滤的终止位置

### percolateDown

元素下滤操作

#### Parameters

-   `i` **[Number][221]** 下滤的元素索引

Returns **[Number][221]** 下滤的终止位置

### insert

e 元素插入

#### Parameters

-   `e` **Anyone** 

Returns **void** 

### getMax

返回堆的最大元素

Returns **Anyone** 

### delMax

删除堆的最大元素

#### Parameters

-   `e` **Anyone** 

Returns **void** 

## properParent

得到父子三者（最多三个) 中的最大值

### Parameters

-   `n`  
-   `i`  

## ListNode

ListNode 类

### Parameters

-   `e` **Anyone?** 初始数组

Returns **[ListNode][227]** Instance

### insertAsSucc

将 元素 e 作为当前节点的直接后继插入

#### Parameters

-   `e` **Anyone** 

Returns **[ListNode][227]** 

### insertAsPred

将 元素 e 作为当前节点的直接前驱插入

#### Parameters

-   `e` **Anyone** 

Returns **[ListNode][227]** 

## List

Linked-list 类

### Parameters

-   `_elem` **[Array][223]** 初始数组

Returns **[List][228]** Instance

### size

获取列表长度/大小

Returns **[number][221]** 

### first

获取列表首节点

Returns **[ListNode][227]** 

### last

获取列表末节点

Returns **[ListNode][227]** 

### insertAsFirst

将 e 作为首节点插入列表

#### Parameters

-   `e` **Anyone** 

Returns **[ListNode][227]** 

### insertAsLast

将 e 作为末节点插入列表

#### Parameters

-   `e` **Anyone** 

Returns **[ListNode][227]** 

### insertA

e 作为节点 p 的直接后继插入

#### Parameters

-   `p`  
-   `e` **Anyone** 

Returns **[number][221]** 

### insertB

e 作为节点 p 的直接前驱插入

#### Parameters

-   `p`  
-   `e` **Anyone** 

Returns **[number][221]** 

### remove

删除指定节点 p

#### Parameters

-   `p` **[number][221]** 要删除元素

Returns **Anyone** e 删除的元素

### disordered

返回列表中相邻元素逆序对总数, 当返回为0则代表列表有序

Returns **[Number][221]** 

### findElem

从节点p往前查找目标元素 e 所在最后节点, 最多查询 n 个

#### Parameters

-   `e` **Anyone** 要搜索的元素
-   `n` **[number][221]** 最大搜索次数 (optional, default `this[size]`)
-   `p` **[ListNode][227]** 从p节点往前查找, 默认为 tailer，查找全部 (optional, default `this[tailer]`)

Returns **[ListNode][227]** 等于 e 的元素最后的节点

### search

从节点p的n的真前驱中查找不大于 e 的最后者

#### Parameters

-   `e` **Anyone** 要搜索的元素
-   `n` **[number][221]** 最大搜索次数 (optional, default `this[size]`)
-   `p` **[ListNode][227]** 从p节点往前查找, 默认为 tailer，查找全部 (optional, default `this[tailer]`)

Returns **[ListNode][227]** 等于 e 的元素最后的节点

### deduplicate

剔除重复元素，保证每个元素都是唯一的

Returns **[number][221]** 被删除的元素个数

### uniquify

有序列表剔除重复元素，保证每个元素都是唯一的

Returns **[number][221]** 被删除的元素个数

### traverse

向量的遍历

#### Parameters

-   `visit` **[function][224]** 访问函数

Returns **any** void

### valid

判断节点是否合法，存在，且不是首尾哨兵

#### Parameters

-   `p` **[ListNode][227]** 

Returns **[boolean][220]** 

### selectMax

从起始位置 p 的n个元素中找到最大者, 相同大小后者优先

#### Parameters

-   `p` **[ListNode][227]** 排序起始节点 (optional, default `this[header].succ`)
-   `n` **[number][221]**  (optional, default `this[size]`)

Returns **[ListNode][227]** 

### insertionSort

列表的插入排序, 对起始位置为 p 的 n 的元素进行排序

#### Parameters

-   `p` **[ListNode][227]** 排序起始节点 (optional, default `this[header].succ`)
-   `n` **[number][221]**  (optional, default `this[size]`)

Returns **[ListNode][227]** 排序后的起始节点

### selectionSort

列表的选择排序, 对起始位置为 p 的 n 的元素进行排序

#### Parameters

-   `p` **[ListNode][227]** 排序起始节点 (optional, default `this[header].succ`)
-   `n` **[number][221]**  (optional, default `this[size]`)

Returns **[ListNode][227]** 排序后的起始节点

### merge

列表的归并排序之归并, 对起始位置为 p 的 n 的元素进行排序

#### Parameters

-   `p` **[ListNode][227]** 合并起始节点
-   `n` **[number][221]** 
-   `he` **[List][228]** 要合并的另外一个列表
-   `q` **[ListNode][227]** 合并的另外一个列表起始节点
-   `m` **[number][221]** 要合并的另外一个列表的节点数

Returns **[ListNode][227]** 归并后的起始节点

### mergeSort

列表的归并排序, 对起始位置为 p 的 n 的元素进行排序

#### Parameters

-   `p` **[ListNode][227]** 排序起始节点 (optional, default `this[header].succ`)
-   `n` **[number][221]**  (optional, default `this[size]`)

Returns **[ListNode][227]** 排序后的起始节点

## Queue

Queue 类

Returns **[Queue][229]** Instance

### enqueue

e 加入队列尾部(排队)

#### Parameters

-   `e` **Anyone** 

Returns **void** 

### dequeue

将队首出队

Returns **Anyone** e 之前压入的元素

### front

指向队首元素

Returns **Anyone** e 之前压入的元素

### empty

判断队列是否为空

Returns **[Boolean][220]** 

### size

当前队列列长度(规模)

Returns **[number][221]** 

## SegmentTree

Segment-tree 线段树(区间树)类

### Parameters

-   `data`  
-   `mergeFn`  
-   `_elem` **[Array][223]** 初始数组

Returns **[List][228]** Instance

### size

获取数据长度/大小

Returns **[number][221]** 

### leftChild

左节点的索引

#### Parameters

-   `index`  

Returns **[number][221]** 

### rightChild

右节点的索引

#### Parameters

-   `index`  

Returns **[number][221]** 

### build

构建线段树

#### Parameters

-   `index`  
-   `left`  
-   `right`  

Returns **void** 

### query

查询线段树的某一区间

#### Parameters

-   `qL` **[Number][221]** 查询的区间开始值
-   `qR` **[Number][221]** 查询的区间结束值

Returns **Anyone** 

### update

更新某个值

#### Parameters

-   `index` **[Number][221]** 原数组的索引
-   `val` **Anyone** 修改后的值

Returns **void** 

## Stack

Stack 类

Returns **[Stack][230]** Instance

### push

e 作为压入栈顶

#### Parameters

-   `e` **Anyone** 

Returns **void** 

### pop

将栈顶出栈

Returns **Anyone** e 之前压入的元素

### top

指向栈顶元素，并不出栈

Returns **Anyone** e 之前压入的元素

### empty

判断栈是否为空

Returns **[Boolean][220]** 

### size

当前栈高度(规模)

Returns **[Number][221]** 

## Trie

Returns **[Trie][231]** Instance

### size

获取字典树的大小, 包含单词的数量

Returns **[number][221]** 

### root

获取字典树的跟节点

Returns **[number][221]** 

### insert

插入 word

#### Parameters

-   `word` **[String][232]** 要插入的单词

Returns **void** 

### find

查找 word

#### Parameters

-   `word` **[String][232]** 要查找的单词

Returns **[Boolean][220]** 

## UnionFind

UnionFind 并查集类

### Parameters

-   `size` **[Number][221]** 集合规模

Returns **[UnionFind][233]** Instance

### find

查找p所属的集合编号

#### Parameters

-   `p` **[Number][221]** 

Returns **[Number][221]** 

### union

链接两个元素

#### Parameters

-   `p` **[Number][221]** 
-   `q` **[Number][221]** 

Returns **void** 

### isConnected

判断两个元素是否相连

#### Parameters

-   `p` **[Number][221]** 
-   `q` **[Number][221]** 

Returns **[Boolean][220]** 

### toString

用来返回内部集合的情况

Returns **[String][232]** 

## Vector

### Parameters

-   `_elem` **[Array][223]** 初始数组 (optional, default `[]`)

Returns **[Vector][234]** Instance

### size

获取向量大小

Returns **[number][221]** 

### insert

e 作为秩为 r 的元素插入，原后继元素依次后移

#### Parameters

-   `r` **[number][221]** 插入新元素的秩 0 &lt;= r &lt;= size
-   `e` **Anyone** 

Returns **[number][221]** 

### removeRange

删除指定区间的元素, 原后继元素依次前移\[lo, hi)

#### Parameters

-   `lo` **[number][221]** 要删除元素起始的秩 0 &lt;= r &lt;= size
-   `hi` **[number][221]** 要删除元素结束的秩 0 &lt;= r &lt;= size

Returns **[number][221]** 删除的元素数量

### remove

删除指定秩的元素, 原后继元素依次前移

#### Parameters

-   `r` **[number][221]** 要删除元素的秩 0 &lt;= r &lt;= size

Returns **Anyone** e 删除的元素

### disordered

返回向量中相邻元素逆序对总数, 当返回为0则代表向量有序

Returns **[Number][221]** 

### findElem

在向量的区间 \[lo, hi)查找元素等于 e 的最大秩

#### Parameters

-   `e` **Anyone** 要搜索的元素
-   `lo` **[number][221]** 要查找的起始秩 (optional, default `0`)
-   `hi` **[number][221]** 要查找的结束秩 (optional, default `_elem.length`)

Returns **[number][221]** 等于 e 的元素最大的秩

### search

在有序向量的区间\[lo, hi)查找元素e 所在的秩, 0 &lt;= lo &lt;= hi &lt;= size

#### Parameters

-   `e` **Anyone** 要搜索的元素
-   `lo` **[number][221]** 要查找的起始秩
-   `hi` **[number][221]** 要查找的结束秩

Returns **[number][221]** 不大于 e 的元素最大的秩

### deduplicate

剔除重复元素，保证每个元素都是唯一的

Returns **[number][221]** 被删除的元素个数

### uniquify

有序向量剔除重复元素，保证每个元素都是唯一的

Returns **[number][221]** 被删除的元素个数

### traverse

向量的遍历

#### Parameters

-   `visit` **[function][224]** 访问函数

Returns **any** void

### binSearch

在有序向量的区间\[lo, hi)查找元素不大于 e 的元素的最大秩, 0 &lt;= lo &lt;= hi &lt;= size

#### Parameters

-   `_elem` **[Vector][234]** 要搜索的有序向量或有序数组
-   `e` **Anyone** 要搜索的元素
-   `lo` **[number][221]** 要查找的起始秩 (optional, default `0`)
-   `hi` **[number][221]** 要查找的结束秩 (optional, default `_elem.length`)

Returns **[number][221]** 不大于 e 的元素最大的秩

### bubbleSort

排序算法 起泡排序, 具有稳定性

#### Parameters

-   `_elem` **[Vector][234]** 要排序的向量或数据
-   `lo` **[number][221]** 要查找的起始秩 (optional, default `0`)
-   `hi` **[number][221]** 要查找的结束秩 (optional, default `_elem.length`)

Returns **void** 

### merge

排序算法 归并排序之合并

#### Parameters

-   `_elem` **[Vector][234]** 要排序的向量或数据
-   `lo` **[number][221]** 要查找的起始秩
-   `mi`  
-   `hi` **[number][221]** 要查找的结束秩

Returns **void** 

### mergeSort

排序算法 归并排序

#### Parameters

-   `_elem` **[Vector][234]** 要排序的向量或数据
-   `lo` **[number][221]** 要查找的起始秩 (optional, default `0`)
-   `hi` **[number][221]** 要查找的结束秩 (optional, default `_elem.length`)

Returns **void** 

[1]: #avl

[2]: #insert

[3]: #parameters

[4]: #remove

[5]: #parameters-1

[6]: #balanced

[7]: #parameters-2

[8]: #avlbalanced

[9]: #parameters-3

[10]: #balfac

[11]: #parameters-4

[12]: #height

[13]: #parameters-5

[14]: #bst

[15]: #search

[16]: #parameters-6

[17]: #insert-1

[18]: #parameters-7

[19]: #remove-1

[20]: #parameters-8

[21]: #removeat

[22]: #parameters-9

[23]: #searchin

[24]: #parameters-10

[25]: #binnode

[26]: #parameters-11

[27]: #data

[28]: #parent

[29]: #lc

[30]: #rc

[31]: #height-1

[32]: #size

[33]: #isroot

[34]: #islchild

[35]: #isrchild

[36]: #hasparent

[37]: #haslchild

[38]: #hasrchild

[39]: #haschild

[40]: #hasbothchild

[41]: #isleaf

[42]: #sibling

[43]: #uncle

[44]: #fromparentto

[45]: #pred

[46]: #succ

[47]: #insertaslc

[48]: #parameters-12

[49]: #insertasrc

[50]: #parameters-13

[51]: #travlevel

[52]: #parameters-14

[53]: #travpre

[54]: #parameters-15

[55]: #travin

[56]: #parameters-16

[57]: #travpost

[58]: #parameters-17

[59]: #swap

[60]: #parameters-18

[61]: #bintree

[62]: #size-1

[63]: #size-2

[64]: #parameters-19

[65]: #empty

[66]: #root

[67]: #root-1

[68]: #parameters-20

[69]: #updateheightabove

[70]: #parameters-21

[71]: #insertasroot

[72]: #parameters-22

[73]: #insertaslc-1

[74]: #parameters-23

[75]: #insertasrc-1

[76]: #parameters-24

[77]: #attachaslc

[78]: #parameters-25

[79]: #attachasrc

[80]: #parameters-26

[81]: #remove-2

[82]: #parameters-27

[83]: #secede

[84]: #parameters-28

[85]: #travlevel-1

[86]: #parameters-29

[87]: #travpre-1

[88]: #parameters-30

[89]: #travin-1

[90]: #parameters-31

[91]: #travpost-1

[92]: #parameters-32

[93]: #heap

[94]: #parameters-33

[95]: #size-3

[96]: #percolateup

[97]: #parameters-34

[98]: #percolatedown

[99]: #parameters-35

[100]: #insert-2

[101]: #parameters-36

[102]: #getmax

[103]: #delmax

[104]: #parameters-37

[105]: #properparent

[106]: #parameters-38

[107]: #listnode

[108]: #parameters-39

[109]: #insertassucc

[110]: #parameters-40

[111]: #insertaspred

[112]: #parameters-41

[113]: #list

[114]: #parameters-42

[115]: #size-4

[116]: #first

[117]: #last

[118]: #insertasfirst

[119]: #parameters-43

[120]: #insertaslast

[121]: #parameters-44

[122]: #inserta

[123]: #parameters-45

[124]: #insertb

[125]: #parameters-46

[126]: #remove-3

[127]: #parameters-47

[128]: #disordered

[129]: #findelem

[130]: #parameters-48

[131]: #search-1

[132]: #parameters-49

[133]: #deduplicate

[134]: #uniquify

[135]: #traverse

[136]: #parameters-50

[137]: #valid

[138]: #parameters-51

[139]: #selectmax

[140]: #parameters-52

[141]: #insertionsort

[142]: #parameters-53

[143]: #selectionsort

[144]: #parameters-54

[145]: #merge

[146]: #parameters-55

[147]: #mergesort

[148]: #parameters-56

[149]: #queue

[150]: #enqueue

[151]: #parameters-57

[152]: #dequeue

[153]: #front

[154]: #empty-1

[155]: #size-5

[156]: #segmenttree

[157]: #parameters-58

[158]: #size-6

[159]: #leftchild

[160]: #parameters-59

[161]: #rightchild

[162]: #parameters-60

[163]: #build

[164]: #parameters-61

[165]: #query

[166]: #parameters-62

[167]: #update

[168]: #parameters-63

[169]: #stack

[170]: #push

[171]: #parameters-64

[172]: #pop

[173]: #top

[174]: #empty-2

[175]: #size-7

[176]: #trie

[177]: #size-8

[178]: #root-2

[179]: #insert-3

[180]: #parameters-65

[181]: #find

[182]: #parameters-66

[183]: #unionfind

[184]: #parameters-67

[185]: #find-1

[186]: #parameters-68

[187]: #union

[188]: #parameters-69

[189]: #isconnected

[190]: #parameters-70

[191]: #tostring

[192]: #vector

[193]: #parameters-71

[194]: #size-9

[195]: #insert-4

[196]: #parameters-72

[197]: #removerange

[198]: #parameters-73

[199]: #remove-4

[200]: #parameters-74

[201]: #disordered-1

[202]: #findelem-1

[203]: #parameters-75

[204]: #search-2

[205]: #parameters-76

[206]: #deduplicate-1

[207]: #uniquify-1

[208]: #traverse-1

[209]: #parameters-77

[210]: #binsearch

[211]: #parameters-78

[212]: #bubblesort

[213]: #parameters-79

[214]: #merge-1

[215]: #parameters-80

[216]: #mergesort-1

[217]: #parameters-81

[218]: #avl

[219]: #binnode

[220]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean

[221]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number

[222]: #bst

[223]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array

[224]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function

[225]: #bintree

[226]: #heap

[227]: #listnode

[228]: #list

[229]: #queue

[230]: #stack

[231]: #trie

[232]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String

[233]: #unionfind

[234]: #vector
