简述
二叉查找树(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);
}
}
}
未完待续。。。。。