企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 搜索二叉树 搜索二叉树(BST)。 规则: 1. 任意一个节点的左子节点都小于这个节点 2. 任意一个节点的右子节点都大于这个节点 ![](https://img.kancloud.cn/71/0f/710f2bd256982e0faad42d7681609d09_1056x786.png) ## 应用场景 这种树的搜索速度:O(logn),速度非常快。 比如:从10亿条记录中查找任意一条记录,最多需要比较30多次。 # 代码实现 ~~~ // 定义节点类 class Node { constructor(data) { this.data = data // 数据 this.left = null // 左子节点 this.right = null // 右子节点 } } // BST树 class BinarySearchTree { constructor() { this.root = null // 根节点 this.length = 0 // 树中节点的数量 } // 向树中插入一条记录 insert(data) { // 1. 创建新的节点 let newNode = new Node(data) // 2.放到树中 // 如果是空树 if(this.root === null) { // 设置这个新节点为树根 this.root = newNode } else { // 从根节点开始比较 this._insert(this.root, newNode) } } _insert(node, newNode) { // 小于向左走 if(newNode.data < node.data) { // 判断是否有左子节点 if(node.left === null) { // 设置这个新节点为左子节点 node.left = newNode } else { // 递归,继承用新节点和左子节点比较 this._insert(node.left, newNode) } } else { // 判断是否有右子节点 if(node.right === null) { // 设置这个新节点为右子节点 node.right = newNode } else { // 递归,继承用新节点和右子节点比较 this._insert(node.right, newNode) } } } // 判断树中是否包含某一个数 has(data) { // 从根节点开始查找 return this._has(this.root, data) } _has(node, data) { // 如果节点为空,说明树中没有这个数 if(node == null) { return false } // 如果值和前节点值相同,找到了 if(data == node.data) { return true } else if(data < node.data) { // 到左子树中查找 return this._has(node.left, data) } else if(data > node.data) { // 到右子树中查找 return this._has(node.right, data) } } } ~~~