JS实现二叉搜索树

本文介绍了如何用JavaScript实现二叉搜索树,包括创建辅助节点类Node,定义二叉搜索树类BST,并实现了插入节点、中序遍历、前序遍历、后序遍历、查找最小节点、查找最大节点以及搜索节点等方法。
摘要由CSDN通过智能技术生成
简述

二叉查找树(Binary Search Tree),它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

代码说明

首先先创建一个辅助节点类Node,它初始化了三个属性:节点值,左孩子,有孩子。

 class Node {
    constructor(value) {
      this.value = value;
      this.left = null;
      this.right = null;
    }
  }

接着创建一个二叉搜索树类BST,它初始化了根节点为null。

class BST {
    constructor() {
      this.root = null;
    }
  }

然后,给这个BST类声明一些方法:
1.insert(value):向树中插入一个节点值为value的节点。
2.midOrderTraverse(callback):中序遍历树,并将树中的每个节点传入callback回调函数里。
3.preOrderTraverse(callback):前序遍历树,并将树中的每个节点传入callback回调函数里。
4.lastOrderTraverse(callback):后序遍历树,并将树中的每个节点传入callback回调函数里。
5. minNodeInTree():查找树中节点值最小的节点。
6. maxNodeInTree():查找树中节点值最大的节点。
7. searchNodeInTree():判断树中是否存在某个节点值为value的节点

具体代码

1.insert(value):向树中插入一个节点值为value的节点。

insert(value) {
      var newNode = new Node(value);//实例化一个新节点
      var root = this.root;
      if (root == null) {           //如果根节点不存在
        this.root = newNode;        //将这个新节点作为根节点
      } else {                      //如果根节点存在
        insertNode(root, newNode);  //将这个新节点在根节点之后找到合适位置插入
      }
    }

这里需要创建一个辅助函数:insertNode(node,newNode);

/*
*函数名称:insertNode
*函数说明:将新节点newNode插入到node节点之后的合适位置
*函数参数:newNode,要插入的新节点
*        node,node节点
*/
function insertNode(node, newNode) {
//如果newNode节点值小于node节点值,进入node节点左分支
    if (newNode.value < node.value) {
      //如果node节点左孩子为空
      if (node.left == null) {
      //将newNode赋给node节点左孩子,插入完毕。
        node.left = newNode;
      } else {
      //如果node节点左孩子不为空,则继续向左孩子的左孩子递归
        insertNode(node.left, newNode);
      }
    } else {
      if (node.right == null) {
        node.right = newNode;
      } else {
        insertNode(node.right, newNode);
      }
    }
  }

未完待续。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值