学习js数据结构与算法-树

120 阅读2分钟

这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战」。

个人觉得要想进大厂,就必须学习了解算法和数据结构,经历了多次面试之后,也知道了算法和数据结构的重要性,所以,我也打算从今天开始,进入学习,下载了一下电子书,边看书,边跟着书的例子来敲一下代码,下面就开始总结一下对算法和数据结构的学习吧。

第二十七天:学习

树是一种非顺序结构,对于快速查找的数据非常有用。

树的结构

树是一种分层数据的抽象模型,可以看下图简单的公司组织架构

image.png

相关术语

  • 根节点:树的顶部叫做根节点,没有父节点
  • 节点:树中的每个元素都叫做节点
  • 内部节点:至少有一个节点的叫内部节点
  • 外部节点(页节点):没有子元素的节点。
  • 祖先:包括父节点、祖父节点、曾祖父节点等。
  • 后代:报错子节点、孙子节点、曾孙节点等。
  • 子树:有节点和它的后代构成
  • 深度:节点的深度取决于它的祖先节点的数量。
  • 高度:节点深度的最大值

可以下图更好的了解

image.png

二叉树

二叉树中的节点最多只有两个子节点:左侧子节点&右侧子节点。

二叉搜索树

二叉树的一种。但只允许左侧节点存储比父节点笑的值,右侧存储比付节点大的值。

创建二叉搜索树

先创建每个节点的结构
export class Node {
	constructor(key) {
    this.key = key;
    this.left = null;
    this.right = null
  }
}

下图更好的理解

![image-20220223123059322](/Users/admin/Library/Application Support/typora-user-images/image-20220223123059322.png)

和链表一样,通过指针关联关系。

二叉树的基本结构
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):从树中移除某个键。