当前位置: 首页 > 编程笔记 >

javascript数据结构之二叉搜索树实现方法

云和同
2023-03-14
本文向大家介绍javascript数据结构之二叉搜索树实现方法,包括了javascript数据结构之二叉搜索树实现方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了javascript二叉搜索树实现方法。分享给大家供大家参考,具体如下:

二叉搜索树:顾名思义,树上每个节点最多只有二根分叉;而且左分叉节点的值 < 右分叉节点的值 。

特点:插入节点、找最大/最小节点、节点值排序 非常方便

二叉搜索树-javascript实现

<script type="text/javascript">
// <![CDATA[
 //打印输出
 function println(msg) {
  document.write(msg + " ");
 }
 //节点类
 var Node = function (v) {
  this.data = v; //节点值
  this.left = null; //左节点
  this.right = null; //右节点
 }
 //二叉搜索树类
 var BinarySearchTree = function () {
  this.root = null; //初始化时,根节点为空
  //插入节点
  //参数:v 为节点的值
  this.insert = function (v) {
   var newNode = new Node(v);
   if (this.root == null) {
    //树为空时,新节点,直接成为根节点
    this.root = newNode;
    return;
   }
   var currentNode = this.root; //工作“指针”节点(从根开始向下找)
   var parentNode = null;
   while (true) {
    parentNode = currentNode;
    if (v < currentNode.data) {
     //当前节点的值 > 目标节点的值     
     //应该向左插,工作节点移到左节点
     currentNode = currentNode.left;
     if (currentNode == null) {
      //没有左节点,则新节点,直接成为左节点
      parentNode.left = newNode;
      return; //退出循环
     }
    }
    else {
     //否则向右插,工作节点移到右节点
     currentNode = currentNode.right;
     if (currentNode == null) {
      parentNode.right = newNode;
      return;
     }
    }
   }
  }
  //查找最小节点
  this.min = function () {
   var p = this.root; //工作节点 
   while (p != null && p.left != null) {
    p = p.left;
   }
   return p;
  }
  //查找最大节点
  this.max = function () {
   var p = this.root; //工作节点 
   while (p != null && p.right != null) {
    p = p.right;
   }
   return p;
  }
  //中序遍历
  this.inOrder = function (rootNode) {
   if (rootNode != null) {
    this.inOrder(rootNode.left); //先左节点
    println(rootNode.data); //再根节点
    this.inOrder(rootNode.right); //再右节点
   }
  }
  //先序遍历
  this.preOrder = function (rootNode) {
   if (rootNode != null) {
    println(rootNode.data); //先根
    this.preOrder(rootNode.left); //再左节点
    this.preOrder(rootNode.right); //再右节点
   }
  }
  //后序遍历
  this.postOrder = function (rootNode) {
   if (rootNode != null) {
    this.postOrder(rootNode.left); //先左节点
    this.postOrder(rootNode.right); //再右节点
    println(rootNode.data); //再根节点
   }
  }
 }
 //以下是测试
 var bTree = new BinarySearchTree();
 //《沙特.算法设计技巧与分析》书上图3.9 左侧的树
 bTree.insert(6);
 bTree.insert(3);
 bTree.insert(8);
 bTree.insert(1);
 bTree.insert(4);
 bTree.insert(9);
 println('中序遍历:')
 bTree.inOrder(bTree.root);
 println("<br/>");
 println("先序遍历:");
 bTree.preOrder(bTree.root);
 println("<br/>");
 println("后序遍历:");
 bTree.postOrder(bTree.root);
 println("<br/>");
 var minNode = bTree.min();
 println("最小节点:" + (minNode == null ? "不存在" : minNode.data));
 println("<br/>");
 var maxNode = bTree.max();
 println("最大节点:" + (maxNode == null ? "不存在" : maxNode.data));
// ]]>
</script>
<!--中序遍历: 1 3 4 6 8 9 <br> 先序遍历: 6 3 1 4 8 9 <br> 后序遍历: 1 4 3 9 8 6 <br> 最小节点:1 <br> 最大节点:9-->

输出结果:

中序遍历: 1 3 4 6 8 9 
先序遍历: 6 3 1 4 8 9 
后序遍历: 1 4 3 9 8 6 
最小节点:1 
最大节点:9

希望本文所述对大家JavaScript程序设计有所帮助。

 类似资料:
  • 二叉树 : 闲话少说,直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>BST</title> </head> <body> <script> //结点 function Node(data,left,right){ this.data=data; t

  • 树是一种非线性的数据结构,以分层的方式存储数据,它对于存储需要快速查找的数据非常有用。 树是一种一对多的数据结构。树又有很多子集,比如:二叉树、二叉搜索树、2-3树、红黑树等等。 现实例子就是公司的组织架构,总裁为树的最顶端叫根节点,各部门按照领导人区分为子树。 在计算机科学中,HTML结构就是典型的树结构 树的节点可以有0个或多个子节点。当一棵树(的所有节点)最多只能有两个子节点时,这样的树被称

  • 二叉树简介 在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 二叉查找树的子节点与父节点的键一般满足一定的顺序关系,习惯上,左节点的键少于父亲节点的键,右节点的键大于父亲节点的键。 二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉

  • 我现在正在看罗伯特·塞奇威克的算法书。在这本书中,我试图理解方法在二叉搜索树中的实现。作者用BST实现了一个符号表。作者描述方法如下: 假设我们寻找秩为k的密钥(该密钥使得BST中的其他密钥精确地k个更小)。如果左子树中的键数t大于k,则我们在左子树中(递归地)寻找秩为k的键;如果t等于k,我们返回根处的键;如果t小于k,我们在右子树中递归地寻找秩为k-t-1的键。像往常一样,这个de-scrip

  • 本文向大家介绍JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例,包括了JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript数据结构与算法之二叉树插入节点、生成二叉树。分享给大家供大家参考,具体如下: javascript数据结构与算法-- 插入节点、生成二叉树 二叉树中,相对较小的值保存在左

  • 本文向大家介绍JavaScript数据结构之二叉树的遍历算法示例,包括了JavaScript数据结构之二叉树的遍历算法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript数据结构之二叉树的遍历算法。分享给大家供大家参考,具体如下: 三种遍历的代码: 最后是实验代码: 树的结构为:                     23            16