205 次浏览
让我们了解一下如何在 Javascript 中创建和表示二叉搜索树。我们首先需要创建 BinarySearchTree 类并在其上定义一个属性 Node。示例class BinarySearchTree { constructor() { // 将根元素初始化为 null。 this.root = null; } } BinarySearchTree.prototype.Node = class { constructor(data, left = null, right = null) { this.data = data; this.left = left; this.right = right; } };我们只是创建了 BST 类的类表示。在继续学习我们将添加到此结构中的函数时,我们将填充此类。
168 次浏览
树中的每个元素都是一个节点。在继续定义二叉树之前,我们需要定义一个节点,因为树由节点组成。我们将创建一个非常简单的节点定义,它具有 3 个属性,即:left、right 和 data。left − 此属性保存此节点的左子节点的引用。right − 此属性保存此节点的右子节点的引用。data − 此属性保存我们要存储在此节点中的数据的引用。让我们看看这种结构的代码表示。示例class Node { constructor(data, left = null, right ... 阅读更多
340 次浏览
二叉搜索树表现出特殊的行为。节点的左子节点的值必须小于其父节点的值,节点的右子节点的值必须大于其父节点的值。在本节中,我们将主要关注此类树。二叉搜索树上的操作我们将定义以下二叉搜索树操作 −将键插入树中树中的中序遍历树中的前序遍历树中的后序遍历在树中搜索值搜索树中的最小值搜索树中的最大值删除树中的叶子节点阅读更多
197 次浏览
二叉树是一种特殊的数据结构,用于数据存储目的。二叉树有一个特殊条件,即每个节点最多可以有两个子节点。二叉树兼具有序数组和链表的优点,因为搜索速度与排序数组一样快,插入或删除操作的速度与链表一样快。以下是一个二叉树的示例,其中包含我们下面讨论的一些术语 −重要术语以下是关于树的一些重要术语。路径 − 路径指的是节点的序列 ... 阅读更多
451 次浏览
树表示层次结构,例如组织层次结构图、文件系统等。更正式地说,树可以递归地(局部地)定义为节点的集合(从根节点开始),其中每个节点都是一个数据结构,由一个值以及节点引用列表(“子节点”)组成,并且受以下约束:没有引用被复制(即每个子节点只有一个父节点)。
111 次浏览
以下是 HashTable 类的完整实现。当然,可以通过使用更有效的数据结构和冲突解决算法来改进它。示例class HashTable { constructor() { this.container = []; // 使用空数组填充容器 // 可用于在发生冲突时添加更多元素 // 的情况下 for (let i = 0; i < 11; i++) { this.container.push([]); } } display() { this.container.forEach((value, index) => ... 阅读更多
443 次浏览
有时我们需要使用连接函数将容器组合在一起并获得一个新容器。我们将编写一个静态连接方法,该方法接收 2 个 HashTable 并创建一个新的 HashTable,其中包含所有值。为简单起见,如果两个 HashTable 中都存在任何键,我们将让第二个 HashTable 中的值覆盖第一个 HashTable 中的值。示例static join(table1, table2) { // 检查两个参数是否都是 HashTable if(!table1 instanceof HashTable || !table2 instanceof HashTable) { throw new Error("非法参数") } let combo = ... 阅读更多
2K+ 次浏览
现在让我们创建一个 forEach 函数,它允许我们遍历所有键值对并在这些值上调用回调。为此,我们只需要遍历容器中的每个链并在键值对上调用回调即可。示例forEach(callback) { // 对于每个链 this.container.forEach(elem => { // 对于每个链中的每个元素,在 KV 对上调用回调 elem.forEach(({ key, value }) => callback(key, value)); }); }您可以使用以下方法进行测试。示例let ht = new HashTable(); ht.put(10, 94); ht.put(20, 72); ht.put(30, 1); ht.put(21, 6); ... 阅读更多
1K+ 次浏览
要删除元素,我们只需要找到它们并使用简单的 splice 函数调用(从数组中就地删除元素)删除它们即可。让我们看看相同的实现 −示例remove(key) { let hashCode = this.hash(key); for (let i = 0; i < this.container[hashCode].length; i++) { // 在链中查找元素 if (this.container[hashCode][i].key === key) { this.container[hashCode].splice(i, 1); return true } } return false; }您可以使用以下方法进行测试 −示例let ht = ... 阅读更多
295 次浏览
我们在 put 方法中已经实现了这一点。让我们再次单独查看它。示例get(key) { let hashCode = hash(key); for(let i = 0; i < this.container[hashCode].length; i ++) { // 在链中查找元素 if(this.container[hashCode][i].key === key) { return this.container[hashCode][i]; } } return undefined; }您可以使用以下方法进行测试。示例let ht = new HashTable(); ht.put(10, 94); ht.put(20, 72); ht.put(30, 1); ht.put(21, 6); ht.put(15, 21); ht.put(32, 34); console.log(ht.get(20)); console.log(ht.get(21)); console.log(ht.get(55)); console.log(ht.get(32));输出这将给出输出。{ key: 20, ... 阅读更多