//封装二叉搜索树
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.max=function(){
let node=this.root
let key=node.key
//寻找最左边的节点
while(node!=null){
key=node.key
node=node.left
}
return key
}
//搜索最小值
BinarySearchTree.prototype.min=function(){
let node=this.root
let key=node.key
//寻找最左边的节点
while(node!=null){
key=node.key
node=node.right
}
return key
}
//搜索值是否在二叉树中存在,存在返回true,不存在返回false
BinarySearchTree.prototype.search=function (key) {
node=this.root
//一直向下寻找,直到节点为空
while(node!=null){
if(key<node.key){
node=node.left
}else if(key>node.key){
node=node.right
}else if(key=node.key){
return true
}
}
return false
}
}
//测试代码
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)
console.log(bst.search(24))
console.log(bst.search(25))
console.log(bst.search(2))
console.log(bst.max())
console.log(bst.min())
二叉树的最大值、最小值以及固定值的搜索
最新推荐文章于 2022-07-18 17:05:02 发布