什么是树?
树是一种分层数据的抽象模型。现实生活中最常见的树的例子就是家谱,或是公司的组织架构。
树的结构图:如下图
树的相关术语:
一棵树包含一系列存在父子关系的节点。每个节点都有一个父节点(除了顶部的第一个节点)以及零个或多个子节点.下面介绍几个常见的树的术语。
- 根节点:位于树顶部的节点,它没有父节点
- 内部节点:至少有一个子节点的节点
- 外部节点:没有子节点的节点,也称为叶节点
- 子树:子树由节点和它的后代构成,如树的结构图中的子树
- 节点的深度:节点的祖先节点的数量
- 树的高度:所有节点深度的最大值
二叉树和二叉搜索树:
二叉树是一种特殊的树结构,二叉树中的节点最多只能有了两个子节点,一个是左侧节点,另一个是右侧节点。
二叉搜索树(BST):二叉搜索树是二叉树的一种,但是它只允许你在左侧节点存储(比父节点)小的值,在右侧节点存储(比父节点)大(或者等于)的值,如上面的树结构就是典型的二叉搜索树。
二叉搜索树的每一个节点也有两个指针,分别指向左侧子节点和右侧子节点。如下图:
注意:规范来说,键是树的相关术语中对节点的称呼。
js实现二叉搜索树的相关定义与方法:
首先是定义一个树的类,因为树的每个节点都有左子树和右子树,所以在定义节点的时候需要指定两个指针。二叉树中的一些方法有向树中插入一个节点,以及寻找树中的最小值和最大值,代码如下:
function BinarySearchTree() {
var Node = function (key) {
this.key = key;
this.left = null;
this.right = null
};
var root = null;
//向树中插入一个新的键
this.insert = function (key) {
//创建一个用来表示新节点的Node实例
var newNode = new Node(k