广告
返回顶部
首页 > 资讯 > 精选 >使用JavaScript怎么实现一个二叉搜索树
  • 734
分享到

使用JavaScript怎么实现一个二叉搜索树

2023-06-07 18:06:55 734人浏览 薄情痞子
摘要

今天就跟大家聊聊有关使用javascript怎么实现一个二叉搜索树,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点

今天就跟大家聊聊有关使用javascript怎么实现一个二叉搜索树,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

JavaScript可以做什么

1.可以使网页具有交互性,例如响应用户点击,给用户提供更好的体验。2.可以处理表单,检验用户的输入,并提供及时反馈节省用户时间。3.可以根据用户的操作,动态的创建页面。4使用JavaScript可以通过设置cookie存储在浏览器上的一些临时信息。

二叉搜索树是一颗二叉树, 可以为空;如果不为空,满足以下性质:

  • 非空左子树的所有键值小于其根结点的键值

  • 非空右子树的所有键值大于其根结点的键值

  • 也就是左结点值想<根结点值<右节点值

  • 左、右子树本身也都是二叉搜索树

二叉搜索树的操作

insert(key):向树中插入一个新的键

search(key):在树中查找一个键,如果结点存在,则返回true;如果不存在,则返回false

inOrderTraverse:通过中序遍历方式遍历所有结点

preOrderTraverse:通过先序遍历方式遍历所有结点

postOrderTraverse:通过后序遍历方式遍历所有结点

min:返回树中最小的值/键

max:返回树中最大的值/键

remove(key):从树中移除某个键

先序遍历

  • ①访问根结点

  • ②先序遍历其左子树

  • ③先序遍历其右子树

中序遍历

①中序遍历其左子树
②访问根结点
③中序遍历其右子树

后序遍历

①后序遍历其左子树
②后序遍历其右子树
③访问根结点

JavaScript 代码实现队列结构

// 创建BinarySearchTreefunction BinarySerachTree() {  // 创建节点构造函数  function node(key) {    this.key = key    this.left = null    this.right = null  }  // 保存根的属性  this.root = null  // 二叉搜索树相关的操作方法  // 向树中插入数据  BinarySerachTree.prototype.insert = function (key) {    // 1.根据key创建对应的node    var newNode = new Node(key)    // 2.判断根节点是否有值    if (this.root === null) {      this.root = newNode    } else {      this.insertNode(this.root, newNode)    }  }  BinarySerachTree.prototype.insertNode = function (node, newNode) {    if (newNode.key < node.key) { // 1.准备向左子树插入数据      if (node.left === null) { // 1.1.node的左子树上没有内容        node.left = newNode      } else { // 1.2.node的左子树上已经有了内容        this.insertNode(node.left, newNode)      }    } else { // 2.准备向右子树插入数据      if (node.right === null) { // 2.1.node的右子树上没有内容        node.right = newNode      } else { // 2.2.node的右子树上有内容        this.insertNode(node.right, newNode)      }    }  }  // 获取最大值和最小值  BinarySerachTree.prototype.min = function () {    var node = this.root    while (node.left !== null) {      node = node.left    }    return node.key  }  BinarySerachTree.prototype.max = function () {    var node = this.root    while (node.right !== null) {      node = node.right    }    return node.key  }  // 搜搜特定的值    BinarySerachTree.prototype.search = function (key) {    var node = this.root    while (node !== null) {      if (node.key > key) {        node = node.left      } else if (node.key < key) {        node = node.right      } else {        return true      }    }    return false  }  // 删除节点  BinarySerachTree.prototype.remove = function (key) {    // 1.获取当前的node    var node = this.root    var parent = null    // 2.循环遍历node    while (node) {      if (node.key > key) {        parent = node        node = node.left      } else if (node.key < key) {        parent = node        node = node.right      } else {        if (node.left == null && node.right == null) {        }      }    }  }  BinarySerachTree.prototype.removeNode = function (node, key) {    // 1.如果传入的node为null, 直接退出递归.    if (node === null) return null    // 2.判断key和对应node.key的大小    if (node.key > key) {      node.left = this.removeNode(node.left, key)    }  }  // 删除结点  BinarySerachTree.prototype.remove = function (key) {    // 1.定义临时保存的变量    var current = this.root    var parent = this.root    var isLeftChild = true    // 2.开始查找节点    while (current.key !== key) {      parent = current      if (key < current.key) {        isLeftChild = true        current = current.left      } else {        isLeftChild = false        current = current.right      }      // 如果发现current已经指向null, 那么说明没有找到要删除的数据      if (current === null) return false    }    // 3.删除的结点是叶结点    if (current.left === null && current.right === null) {      if (current == this.root) {        this.root == null      } else if (isLeftChild) {        parent.left = null      } else {        parent.right = null      }    }    // 4.删除有一个子节点的节点    else if (current.right === null) {      if (current == this.root) {        this.root = current.left      } else if (isLeftChild) {        parent.left = current.left      } else {        parent.right = current.left      }    } else if (current.left === null) {      if (current == this.root) {        this.root = current.right      } else if (isLeftChild) {        parent.left = current.right      } else {        parent.right = current.right      }    }    // 5.删除有两个节点的节点    else {      // 1.获取后继节点      var successor = this.getSuccessor(current)      // 2.判断是否是根节点      if (current == this.root) {        this.root = successor      } else if (isLeftChild) {        parent.left = successor      } else {        parent.right = successor      }      // 3.将删除节点的左子树赋值给successor      successor.left = current.left    }    return true  }  // 找后继的方法  BinarySerachTree.prototype.getSuccessor = function (delNode) {    // 1.使用变量保存临时的节点    var successorParent = delNode    var successor = delNode    var current = delNode.right // 要从右子树开始找    // 2.寻找节点    while (current != null) {      successorParent = successor      successor = current      current = current.left    }    // 3.如果是删除图中15的情况, 还需要如下代码    if (successor != delNode.right) {      successorParent.left = successor.right      successor.right = delNode.right    }  }  // 遍历方法  //handler为回调函数  // 先序遍历  BinarySerachTree.prototype.preOrderTraversal = function (handler) {    this.preOrderTranversalNode(this.root, handler)  }  BinarySerachTree.prototype.preOrderTranversalNode = function (node, handler) {    if (node !== null) {      handler(node.key)      this.preOrderTranversalNode(node.left, handler)      this.preOrderTranversalNode(node.right, handler)    }  }  // 中序遍历  BinarySerachTree.prototype.inOrderTraversal = function (handler) {    this.inOrderTraversalNode(this.root, handler)  }  BinarySerachTree.prototype.inOrderTraversalNode = function (node, handler) {    if (node !== null) {      this.inOrderTraversalNode(node.left, handler)      handler(node.key)      this.inOrderTraversalNode(node.right, handler)    }  }  // 后续遍历  BinarySerachTree.prototype.postOrderTraversal = function (handler) {    this.postOrderTraversalNode(this.root, handler)  }  BinarySerachTree.prototype.postOrderTraversalNode = function (node, handler) {    if (node !== null) {      this.postOrderTraversalNode(node.left, handler)      this.postOrderTraversalNode(node.right, handler)      handler(node.key)    }  }    }

看完上述内容,你们对使用JavaScript怎么实现一个二叉搜索树有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 使用JavaScript怎么实现一个二叉搜索树

本文链接: https://www.lsjlt.com/news/249932.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用JavaScript怎么实现一个二叉搜索树
    今天就跟大家聊聊有关使用JavaScript怎么实现一个二叉搜索树,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点...
    99+
    2023-06-07
  • 怎么利用JavaScript实现二叉搜索树
    这篇文章给大家分享的是有关怎么利用JavaScript实现二叉搜索树的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。计算机科学中最常用和讨论最多的数据结构之一是二叉搜索树。这通常是引入的第一个具有非线性插入算法的数...
    99+
    2023-06-14
  • Java简单几步实现一个二叉搜索树
    目录1、认识二叉搜索树2、实现一个二叉搜索树2.1 成员变量2.2 insert 方法2.3 search 方法2.4 remove 方法(重点)3、二叉搜索树总结1、认识二叉搜索树...
    99+
    2023-02-08
    Java二叉搜索树 Java二叉树
  • 【Java 数据结构】实现一个二叉搜索树
    目录  1、认识二叉搜索树 2、实现一个二叉搜索树 2.1 成员变量 2.2 insert 方法 2.3 search 方法  2.4 remove 方法(重点) 3、二叉搜索树总结 1、认识二叉搜索树 从字面上来看,它只比二叉树多...
    99+
    2023-09-02
    数据结构 算法 二叉搜索树
  • 如何利用JavaScript实现二叉搜索树
    计算机科学中最常用和讨论最多的数据结构之一是二叉搜索树。这通常是引入的第一个具有非线性插入算法的数据结构。二叉搜索树类似于双链表,每个节点包含一些数据,以及两个指向其他节点的指针;它...
    99+
    2022-11-12
  • C++使用LeetCode实现独一无二的二叉搜索树
    这篇文章主要介绍C++使用LeetCode实现独一无二的二叉搜索树,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完![LeetCode] 96. Unique Binary Search Trees 独一无二的二叉搜索树...
    99+
    2023-06-20
  • 利用java实现二叉搜索树
    目录二叉搜索树的定义实现一颗二叉搜索树二叉搜索树的定义类二叉搜索树的查找二叉搜索树的插入二叉搜索树的删除二叉搜索树的定义 它是一颗二叉树 任一节点的左子树上的所有节...
    99+
    2022-11-12
  • JavaScript 中怎么实现一个二叉树算法
    这篇文章将为大家详细讲解有关JavaScript 中怎么实现一个二叉树算法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。二叉树和二叉搜索树介绍二叉树中的节点...
    99+
    2022-10-19
  • C++实现LeetCode(96.独一无二的二叉搜索树)
    [LeetCode] 96. Unique Binary Search Trees 独一无二的二叉搜索树 Given n, how many structurally un...
    99+
    2022-11-12
  • C++实现LeetCode(95.独一无二的二叉搜索树之二)
    [LeetCode] 95. Unique Binary Search Trees II 独一无二的二叉搜索树之二 Given an integer n, generate...
    99+
    2022-11-12
  • java二叉搜索树使用实例分析
    本篇内容主要讲解“java二叉搜索树使用实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java二叉搜索树使用实例分析”吧!概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性...
    99+
    2023-06-29
  • C++中怎么利用LeetCode实现二叉搜索树迭代器
    C++中怎么利用LeetCode实现二叉搜索树迭代器,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。[LeetCode] 173.Binary Search Tr...
    99+
    2023-06-20
  • C++ AVLTree高度平衡的二叉搜索树怎么实现
    这篇“C++ AVLTree高度平衡的二叉搜索树怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++&nb...
    99+
    2023-07-05
  • C++使用LeetCode实现二叉搜索树的示例分析
    这篇文章将为大家详细讲解有关C++使用LeetCode实现二叉搜索树的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Given an integer n, generate all st...
    99+
    2023-06-20
  • Java怎么实现二叉搜索树的插入、删除功能
    这篇文章给大家介绍Java怎么实现二叉搜索树的插入、删除功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的特点有哪些Java的特点有哪些 1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允...
    99+
    2023-06-26
  • 怎么在Java中实现一个二叉树路径
    这篇文章给大家介绍怎么在Java中实现一个二叉树路径,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。给定一个二叉树,和 目标值 = 5:  1 / \ 2 4&...
    99+
    2023-05-30
    java
  • JavaScript中怎么实现一个二叉堆
    本篇文章为大家展示了JavaScript中怎么实现一个二叉堆,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前言二叉树(Binary  Tree)是一种树形...
    99+
    2022-10-19
  • C#中怎么实现一个二叉树遍历算法
    这篇文章给大家介绍C#中怎么实现一个二叉树遍历算法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#算法实现了二叉树的定义,怎么构造一颗已知的二叉树,用几种常规的算法(先序,中序,后序,层次)进行C#二叉树遍历。希望能...
    99+
    2023-06-18
  • C++数据结构二叉搜索树的实现应用与分析
    目录概念二叉搜索树的实现基本框架二叉搜索树的插入二叉搜索树的查找二叉搜索树的删除(重点)二叉搜索树的应用二叉树性能分析总结⭐️博客代码已上传至gitee:https://gitee....
    99+
    2022-11-13
  • C语言线索二叉树结构怎么实现
    这篇文章主要讲解了“C语言线索二叉树结构怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言线索二叉树结构怎么实现”吧!线索二叉树的意义对于一个有n个节点的二叉树,每个节点有指向左右...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作