JavaScript 版本的数据结构,提供常用的数据结构封装,基于清华大学邓俊辉老师的数据结构课程
- List (linked-list)
- Vector
- Stack
- Queue
- SegmentTree
- UnionFind
- BinTree
- BST (BinanySearchTree)
- BTree
- Trie
- Graph
- Heap
- LeftHeap
- Priority Queue
- AVL
- BST
- BinNode
- BinTree
- Heap
- properParent
- ListNode
- List
- Queue
- SegmentTree
- Stack
- Trie
- UnionFind
- Vector
Extends BST
AVL 类(AVL 树, 继承自 BST)
Returns AVL Instance
插入元素
e
Anyone 要插入的数据元素
Returns BinNode
删除元素, 注意是删除节点,非节点为根的子树
e
Anyone 要插入的数据元素
Returns Boolean 是否成功删除
判断某个节点是否理想平衡即:左右高度相等
x
要判断的节点
BinNode
Returns Boolean
判断某个节点是否AVL平衡即:-2<左高度-右高度<2
x
要判断的节点
BinNode
Returns Boolean
获取节点的平衡因子 x.lc.height - x.rc.height;
x
要判断的节点
BinNode
Returns number 左子树高度和右子树高度的差值
获取节点的高度
x
要判断的节点
BinNode
Returns number 节点高度,空树高 -1, 叶子高 0
Extends BinTree
BST 类(二叉搜索树类, 继承自 BinTree)
Returns BST Instance
查找元素 e 所在的节点
e
Anyone 要搜索的元素
Returns [BinNode] 返回两项,第一项是搜索命中的节点,第二项是命中节点的父节点
插入元素
e
Anyone 要插入的数据元素
Returns BinNode
删除元素, 注意是删除节点,非节点为根的子树
e
Anyone 要插入的数据元素
Returns Boolean 是否成功删除
删除某个节点
x
BinNode 要删除的节点
Returns BinNode 返回接替者
以 v 为根节点查找元素 e 所在的节点
Returns [BinNode] 返回两项,第一项是搜索命中的节点,第二项是命中节点的父节点
BinNode 类(二叉树节点类)
e
Anyone (optional, defaultnull
)parent
BinNode 父节点 (optional, defaultnull
)lc
BinNode 左子节点 (optional, defaultnull
)rc
BinNode 右子节点 (optional, defaultnull
)
Returns BinNode Instance
节点存储数据
父节点
左子节点
右子节点
以该节点为根的树高度
节点为根的子树规模
Returns Boolean
判断是否是根节点
Returns Boolean
判断是否是左子节点
Returns Boolean
判断是否是右子节点
Returns Boolean
判断是否有父节点
Returns Boolean
判断是有左子节点
Returns Boolean
判断是有左子节点
Returns Boolean
判断是有子节点
Returns Boolean
判断是有完整子节点 (即左右子节点都有)
Returns Boolean
判断是否是叶子节点(没有子节点)
Returns Boolean
兄弟节点
Returns BinNode
叔叔节点(即父节点的兄弟节点)
Returns BinNode
获取来自父节点的引用
Returns Array [object, key]
获取中序遍历下的直接前驱
Returns BinNode 返回前驱节点,不存在则返回 null
获取中序遍历下的直接后继
Returns BinNode 返回后继节点,不存在则返回 null
将元素作为左子节点插入
e
Anyone
Returns BinNode 返回插入额节点
将元素作为右子节点插入
e
Anyone
Returns BinNode 返回插入额节点
当前节点作为根节点的子树层次遍历 BFS
p
visit
访问函数
function
Returns void
当前节点作为根节点的子树前序遍历 DFS
Returns void
当前节点作为根节点的子树中序遍历 DFS
Returns void
当前节点作为根节点的子树后序遍历 DFS
Returns void
交换量几个节点的数据
Returns void
BinTree 类(二叉树类)
Returns BinTree Instance
树的规模
Returns number
更新树的规模
num
Returns number
树是否为空
Returns Boolean
树根节点
Returns BinNode
重置根节点
_root
Returns BinNode
更新节点以及祖先节点的高度
p
BinNode 要更新的节点
Returns number 返回更新后的高度
作为树根节点插入
e
Anyone 要插入的数据元素
Returns BinNode
作为节点的左孩子插入
p
BinNode 要插入的位置e
Anyone 要插入的数据元素
Returns BinNode
作为节点的右孩子插入
p
BinNode 要插入的位置e
Anyone 要插入的数据元素
Returns BinNode
作为节点的左孩子接入子树
Returns BinNode
作为节点的右孩子接入子树
Returns BinNode
删除某个节点作为根的子树
p
BinNode 要删除的根节点
Returns number 返回删除节点的总个数
分离某个节点作为根的子树
p
BinNode 要删除的根节点
Returns BinTree 返回分离出来的子树
树的层次遍历
visit
访问函数
function
Returns void
树的前序遍历
visit
访问函数
function
Returns void
树的中序遍历
visit
访问函数
function
Returns void
树的后序遍历
visit
访问函数
function
Returns void
Heap 堆
elems
(optional, default[]
)length
(optional, default0
)
Returns Heap Instance
获取堆的大小
Returns number
元素上滤操作
i
Number 上滤的元素索引
Returns Number 上滤的终止位置
元素下滤操作
i
Number 下滤的元素索引
Returns Number 下滤的终止位置
e 元素插入
e
Anyone
Returns void
返回堆的最大元素
Returns Anyone
删除堆的最大元素
e
Anyone
Returns void
得到父子三者(最多三个) 中的最大值
n
i
ListNode 类
e
Anyone? 初始数组
Returns ListNode Instance
将 元素 e 作为当前节点的直接后继插入
e
Anyone
Returns ListNode
将 元素 e 作为当前节点的直接前驱插入
e
Anyone
Returns ListNode
Linked-list 类
_elem
Array 初始数组
Returns List Instance
获取列表长度/大小
Returns number
获取列表首节点
Returns ListNode
获取列表末节点
Returns ListNode
将 e 作为首节点插入列表
e
Anyone
Returns ListNode
将 e 作为末节点插入列表
e
Anyone
Returns ListNode
e 作为节点 p 的直接后继插入
p
e
Anyone
Returns number
e 作为节点 p 的直接前驱插入
p
e
Anyone
Returns number
删除指定节点 p
p
number 要删除元素
Returns Anyone e 删除的元素
返回列表中相邻元素逆序对总数, 当返回为0则代表列表有序
Returns Number
从节点p往前查找目标元素 e 所在最后节点, 最多查询 n 个
e
Anyone 要搜索的元素n
number 最大搜索次数 (optional, defaultthis[size]
)p
ListNode 从p节点往前查找, 默认为 tailer,查找全部 (optional, defaultthis[tailer]
)
Returns ListNode 等于 e 的元素最后的节点
从节点p的n的真前驱中查找不大于 e 的最后者
e
Anyone 要搜索的元素n
number 最大搜索次数 (optional, defaultthis[size]
)p
ListNode 从p节点往前查找, 默认为 tailer,查找全部 (optional, defaultthis[tailer]
)
Returns ListNode 等于 e 的元素最后的节点
剔除重复元素,保证每个元素都是唯一的
Returns number 被删除的元素个数
有序列表剔除重复元素,保证每个元素都是唯一的
Returns number 被删除的元素个数
向量的遍历
visit
function 访问函数
Returns any void
判断节点是否合法,存在,且不是首尾哨兵
p
ListNode
Returns boolean
从起始位置 p 的n个元素中找到最大者, 相同大小后者优先
Returns ListNode
列表的插入排序, 对起始位置为 p 的 n 的元素进行排序
Returns ListNode 排序后的起始节点
列表的选择排序, 对起始位置为 p 的 n 的元素进行排序
Returns ListNode 排序后的起始节点
列表的归并排序之归并, 对起始位置为 p 的 n 的元素进行排序
Returns ListNode 归并后的起始节点
列表的归并排序, 对起始位置为 p 的 n 的元素进行排序
Returns ListNode 排序后的起始节点
Queue 类
Returns Queue Instance
e 加入队列尾部(排队)
e
Anyone
Returns void
将队首出队
Returns Anyone e 之前压入的元素
指向队首元素
Returns Anyone e 之前压入的元素
判断队列是否为空
Returns Boolean
当前队列列长度(规模)
Returns number
Segment-tree 线段树(区间树)类
data
mergeFn
_elem
Array 初始数组
Returns List Instance
获取数据长度/大小
Returns number
左节点的索引
index
Returns number
右节点的索引
index
Returns number
构建线段树
index
left
right
Returns void
查询线段树的某一区间
Returns Anyone
更新某个值
index
Number 原数组的索引val
Anyone 修改后的值
Returns void
Stack 类
Returns Stack Instance
e 作为压入栈顶
e
Anyone
Returns void
将栈顶出栈
Returns Anyone e 之前压入的元素
指向栈顶元素,并不出栈
Returns Anyone e 之前压入的元素
判断栈是否为空
Returns Boolean
当前栈高度(规模)
Returns Number
Returns Trie Instance
获取字典树的大小, 包含单词的数量
Returns number
获取字典树的跟节点
Returns number
插入 word
word
String 要插入的单词
Returns void
查找 word
word
String 要查找的单词
Returns Boolean
UnionFind 并查集类
size
Number 集合规模
Returns UnionFind Instance
查找p所属的集合编号
p
Number
Returns Number
链接两个元素
Returns void
判断两个元素是否相连
Returns Boolean
用来返回内部集合的情况
Returns String
_elem
Array 初始数组 (optional, default[]
)
Returns Vector Instance
获取向量大小
Returns number
e 作为秩为 r 的元素插入,原后继元素依次后移
r
number 插入新元素的秩 0 <= r <= sizee
Anyone
Returns number
删除指定区间的元素, 原后继元素依次前移[lo, hi)
Returns number 删除的元素数量
删除指定秩的元素, 原后继元素依次前移
r
number 要删除元素的秩 0 <= r <= size
Returns Anyone e 删除的元素
返回向量中相邻元素逆序对总数, 当返回为0则代表向量有序
Returns Number
在向量的区间 [lo, hi)查找元素等于 e 的最大秩
e
Anyone 要搜索的元素lo
number 要查找的起始秩 (optional, default0
)hi
number 要查找的结束秩 (optional, default_elem.length
)
Returns number 等于 e 的元素最大的秩
在有序向量的区间[lo, hi)查找元素e 所在的秩, 0 <= lo <= hi <= size
Returns number 不大于 e 的元素最大的秩
剔除重复元素,保证每个元素都是唯一的
Returns number 被删除的元素个数
有序向量剔除重复元素,保证每个元素都是唯一的
Returns number 被删除的元素个数
向量的遍历
visit
function 访问函数
Returns any void
在有序向量的区间[lo, hi)查找元素不大于 e 的元素的最大秩, 0 <= lo <= hi <= size
_elem
Vector 要搜索的有序向量或有序数组e
Anyone 要搜索的元素lo
number 要查找的起始秩 (optional, default0
)hi
number 要查找的结束秩 (optional, default_elem.length
)
Returns number 不大于 e 的元素最大的秩
排序算法 起泡排序, 具有稳定性
_elem
Vector 要排序的向量或数据lo
number 要查找的起始秩 (optional, default0
)hi
number 要查找的结束秩 (optional, default_elem.length
)
Returns void
排序算法 归并排序之合并
Returns void
排序算法 归并排序
_elem
Vector 要排序的向量或数据lo
number 要查找的起始秩 (optional, default0
)hi
number 要查找的结束秩 (optional, default_elem.length
)
Returns void