这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战」。
我个人觉得要想进大厂,就必须学习了解算法和数据结构,经历了多次面试之后,也知道了算法和数据结构的重要性,所以,我也打算从今天开始,进入学习,下载了一下电子书,边看书,边跟着书的例子来敲一下代码,下面就开始总结一下对算法和数据结构的学习吧。
第二十七天:学习树
树
树是一种非顺序结构,对于快速查找的数据非常有用。
树的结构
树是一种分层数据的抽象模型,可以看下图简单的公司组织架构
相关术语
- 根节点:树的顶部叫做根节点,没有父节点
- 节点:树中的每个元素都叫做节点
- 内部节点:至少有一个节点的叫内部节点
- 外部节点(页节点):没有子元素的节点。
- 祖先:包括父节点、祖父节点、曾祖父节点等。
- 后代:报错子节点、孙子节点、曾孙节点等。
- 子树:有节点和它的后代构成
- 深度:节点的深度取决于它的祖先节点的数量。
- 高度:节点深度的最大值
可以下图更好的了解
二叉树
二叉树中的节点最多只有两个子节点:左侧子节点&右侧子节点。
二叉搜索树
二叉树的一种。但只允许左侧节点存储比父节点笑的值,右侧存储比付节点大的值。
创建二叉搜索树
先创建每个节点的结构
export class Node {
constructor(key) {
this.key = key;
this.left = null;
this.right = null
}
}
下图更好的理解

和链表一样,通过指针关联关系。
二叉树的基本结构
export default class BinarySearchTree {
constructor(compareFn = defaultCompare) {
this.compareFn = compareFn
this.root = null
}
}
root保存Node类型的根节点
需要实现的方法
-
insert(key):向树中插入一个新的键。
-
search(key):在树中查找一个键。如果节点存在,则返回 true;如果不存在,则返回
false。
-
inOrderTraverse():通过中序遍历方式遍历所有节点。
-
preOrderTraverse():通过先序遍历方式遍历所有节点。
-
postOrderTraverse():通过后序遍历方式遍历所有节点。
-
min():返回树中最小的值/键。
-
max():返回树中最大的值/键。
-
remove(key):从树中移除某个键。