//封装二叉搜索树
function BinarySearchTree() {
function Node(key) {
this.key=key
this.left=null
this.right=null
}
//根节点属性
this.root=null
//insert方法 向外暴露给用户使用
BinarySearchTree.prototype.insert=function (key) {
//1.先根据key创建节点
let newNode=new Node(key)
//2.判断根节点是否有值
if(this.root==null){
this.root=newNode
}else{
this.insertNode(this.root,newNode)
}
}
BinarySearchTree.prototype.insertNode=function (node,newNode) {
//1.向左搜索 2.向右搜索
if(newNode.key<node.key){
if(node.left==null){
node.left=newNode
}else{
this.insertNode(node.left,newNode)
}
}else {
if(node.right==null){
node.right=newNode
}else{
this.insertNode(node.right,newNode)
}
}
}
//中序遍历
BinarySearchTree.prototype.midOrderTraversal=function (handler) {
this.midOrderTraversalNode(this.root,handler)
}
BinarySearchTree.prototype.midOrderTraversalNode=function (node,handler) {
if(node!=null){
//1.遍历左子树
this.midOrderTraversalNode(node.left,handler)
//打印经过的节点
handler(node.key)
//2.遍历右子树
this.midOrderTraversalNode(node.right,handler)
}
}
}
//测试代码
let bst = new BinarySearchTree()
bst.insert(11)
bst.insert(7)
bst.insert(15)
bst.insert(5)
bst.insert(3)
bst.insert(9)
bst.insert(8)
bst.insert(10)
bst.insert(13)
bst.insert(12)
bst.insert(14)
bst.insert(20)
bst.insert(18)
bst.insert(6)
bst.insert(25)
let resultString=""
bst.midOrderTraversal(function (key) {
resultString+=key+' '
})
console.log(resultString)