二叉搜索树 - 数据结构训练营

二叉搜索树是一种相当常见的树,因为它能在将数据保持在有序的状态的情况下,高效地访问、搜索、插入和删除值。 假设有如下一系列数字: 1000 个元素只需 10 次查找! 关于二叉搜索树的另一个重要地方是它和链表很像,在添加或删除值时只需要更新紧邻的项即可。 实现空二叉搜索树数据结构可以提供以下一些运算: 一个生成空二叉搜索树的构造函数; 判断元素是否在二叉搜索树中; 将元素添加到二叉搜索树中; 下面我们将依次介绍其实现。 一个生成空二叉搜索树的构造函数 和 Tree 一样,需要一个二叉搜索树的根节点。 constructor() { this.root = null; } 判断元素是否在二叉搜索树中 为了判断值是否存在于树中,首先需要搜索树。 contains(value) { // 从根节点开始 // 只要有节点可以访问,持续运行。如果到达一个值为 null 的左子节点或右子节点,那么循环结束。 // 如果值大于 current.value 向右移动 // 如果值小于 current.value 向左移动。 // 否则,即等于 current.value 返回 true。 // 如果没有匹配,返回 false。 } 将元素添加到二叉搜索树中 在添加之前,参考上面先进行遍历,找到适合添加的节点的位置。当到达一个为 null 的 left 或 right 时,将在该位置添加一个新节点。 add(value) { // 首先创建节点 let node = { value: value, left: null, right: null }; // 当根节点为 null 时,只需要将该节点设置为根节点 // 从根节点开始 let current = this.root; // 循环直到成功添加节点或发现它已经存在 while (true) { // 如果值大于 current.value 向右移动 // 如果 right 不存在,则将其设置为新建的节点,并停止遍历 // 否则,移动到右子节点 // 如果该值小于 current.value 向左移动。 // 如果左子节点不存在,则将其设置为新建的节点,并停止遍历。 // 否则,移动到左子节点 // 如果既不小于也不大于,那么它和 current.value 相等,节点已存在,什么也不做。 } }
使用正确的数据结构可以大大简化原本复杂的逻辑。如果很注重性能或想节约内存,那么就需要选择正确的数据结构。来和我一起用 JavaScript 语言来实现一些常用数据结构吧。


运行