JavaScript数据结构复习(篇7-1)树的基本概念

树的定义

在这里插入图片描述

二叉树

二叉树中的节点最多只能有两个节点,一个左侧节点,一个右侧节点。

二叉搜索树(BST)

二叉搜索树是二叉树的一种,只允许左侧节点小于右侧节点

在这里插入图片描述

创建二叉搜索树

function BinarySearchTree(){
	let Node=function(key){//创建节点
		this.key=key
		this.left=null
		this.right=null
	}
	let root=null
}

插入节点

步骤1:创建新的节点
步骤2:验证插入操作是否为特殊操作。判断插入的是否为树的第一个节点
步骤3:将节点加在非根节点的其他位置

// 插入一个新节点(键值)
this.insert=function(key){
	let newNode=new Node(key)
	if(root===null){
		root=newNode
	}else{
		insertNode(root,newNode)
	}
}
let insertNode=function(node,newNode){
	if(newNode.key<node.key){ //插入左边
		if(node.left===null){
			node.left=newNode
		}else{
			insertNode(node.left,newNode)
		}
	}else{//插入右边
		if(node.right===null){
			node.right=newNode
		}else{
			insertNode(node.right,newNode)
		}
	}
}

中序遍历

this.inOrderTraver = function(callback){
	inOrderTraverNode(root,callback)
}
let inOrderTraverNode=function(node,callback){
	if(node!==null){
		inOrderTraverNode(node.left,callback)
		callback(node.key)
		inOrderTraverNode(node.right,callback)
	}
}

前序遍历

this.preOrderTraverse = function(callback){
	preOrderTraverseNode(root,callback)
}
let preOrderTraverseNode = function(node,callback){
	if(node !==null){
		callback(node.key)
		preOrderTraverseNode(node.left,callback)
		preOrderTraverseNode(node.right,callback)
	}
}

后序遍历

this.postOrderTraverse = function(callback){
	postOrderTraverseNode(root,callback)
}
let postOrderTraverseNode = function(node,callback){
	if(node !==null){
		postOrderTraverseNode(node.left,callback)
		postOrderTraverseNode(node.right,callback)
		callback(node.key)
	}
}

打印节点值

function print(value){
	console.log(value)
}

在这里插入图片描述

测试

let tree=new BinarySearchTree()
tree.insert(11)
tree.insert(7)
tree.insert(15)
tree.insert(5)
tree.insert(3)
tree.insert(9)
tree.insert(8)
tree.insert(10)
tree.insert(13)
tree.insert(12)
tree.insert(14)
tree.insert(20)
tree.insert(18)
tree.insert(25)
console.log(tree)
tree.inOrderTraver(print)
//3 5 7 8 9 10 11 12 13 14 15 18 20 25 
console.log('————————————')
tree.preOrderTraverse(print)
//11 7 5 3  9 8 10 15 13 12 14 20 18 25
console.log('————————————')
tree.postOrderTraverse(print)
//3 5 8 10 9 7 12 14 13 18 25 20 15 11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值