JavaScript 数据结构系列目录
文章目录
一、树的概述
树是一种由 n (n >= 1) 个结点组成的一个具有层次的集合的数据结构。
之所以称之为树是因为它看起来像一颗倒挂起来的树。
也就是说,它的根在上,叶在下。
而它具有如下特点:
每个节点具有零个或多个子节点,但其只能有一个父节点。
如果有个节点没有父节点,那么它必然是根节点。
每个拥有多个子节点的节点也可以被称之为子树。
二、树的相关语术
根节点 : 位于顶部的节点叫做根节点。
内部节点 : 至少拥有一个子节点的节点是为内部节点。
外部节点(又称叶节点) : 没有子元素节点的节点称之为外部节点或叶节点。
子树 :拥有多个子节点的节点可以被称之为子树。
深度 : 节点的深度取决于它祖先节点的数量。
高度 : 节点的高度取决于其深度的最大值。
三、二叉树和二叉搜索树
1、二叉树与二叉搜索数的概念
二叉树是一种特殊的树。
其每个节点最多只能拥有两个子元素:左侧子节点与右侧子节点。
而这个定义有助于我们写出更高效的算法(插入,查找和删除)。
其在计算机科学中运用的十分广泛。
二叉搜索树(BST) 是二叉树的一种,但其只允许你在左侧节点存储比父节点小的值,在右侧存储比父节点大的值。
如图:
2、创建二叉搜索树类
老样子,我们先创建一个 BinarySearchTree 类与它的辅助类 Node。
以 Node 类来表示二叉搜索树中的每个节点。
class Node {
constructor(key) {
this.key = key;// 节点值
this.left = null;// 左侧子节点
this.right = null;// 右侧子节点
}
}
class BinarySearchTree {
constructor() {
this.root = null;
this.comparFn = (a,b) => {
if ( a === b ) return 0;
return a < b ? -1 : 1;
};
}
}
创建完后,又到了我们填充方法时间。
(1)、insert 方法
insert(key) {
if ( this.root == null ) this.root = new Node(