JS实现二叉搜索树

来源:互联网 发布:嵌入式网络视频服务器 编辑:程序博客网 时间:2024/06/05 09:42

简述

二叉查找树(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);      }    }  }

未完待续。。。。。

原创粉丝点击