二叉树

本文详细介绍了二叉搜索树的数据结构实现,包括插入、查找、遍历(中序、前序、后序)以及获取最小和最大值的功能。通过具体示例展示了如何构建和操作二叉树。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function Binarytree(){
	var Node = function(key){
		this.key=key;
		this.left=null;
		this.right=null;
	};
	var root=null;      //根节点
//				插入节点
	var 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.insert = function(key){
		var newNode = new Node(key);
		if(root===null){
			root=newNode;
		}else{
			insertNode(root,newNode);
		}
	}
	
	var inOrderTraverseNode = function(node,callback){
		if(node !== null){
			inOrderTraverseNode(node.left,callback);
			callback(node.key);
			inOrderTraverseNode(node.right,callback);
		}
	}
	//中序遍历
	this.inOrderTraverse = function(callback){
		inOrderTraverseNode(root,callback)
	}
	
	var preOrderTraverseNode = function(node,callback){
		if(node !== null){
			callback(node.key);
			preOrderTraverseNode(node.left,callback);
			preOrderTraverseNode(node.right,callback);
		}
	}
	//前序遍历
	this.preOrderTraverse = function(callback){
		preOrderTraverseNode(root,callback)
	}
	
	var postOrderTraverseNode = function(node,callback){
		if(node !== null){
			preOrderTraverseNode(node.left,callback);
			preOrderTraverseNode(node.right,callback);
			callback(node.key);
		}
	}
	//后序遍历
	this.postOrderTraverse = function(callback){
		postOrderTraverseNode(root,callback);
	}
	
	var minNode=function(node){
		
		if(node){
			while(node && node.left !== null){
				node = node.left;
			}
			return node.key;
		}
		return null;
	}
	//最小值
	this.min = function(){
		return minNode(root);
	}
	
	//最大值
	var maxNode = function(node){
		if(node){
			while(node && node.right !== null){
				node = node.right;
			}
			return node.key;
		}
		return null;
	}
	this.max=function(){
		return maxNode(root)
	}
	
	//查找子节点
	var searchNode = function(node,key){
		if(node === null){
			return false;
		}
		if(key<node.key){
			return searchNode(node.left,key);
		}else if(key>node.key){
			return searchNode(node.right,key)
		}else{
			return true;
		}
	}
	this.search = function(key){
		return searchNode(root,key);
	}
}

var nodes=[8,3,10,6,14,5,2,7,1];
var binaryTree = new Binarytree();
nodes.forEach(function(key){
	binaryTree.insert(key);
});

var callback = function(key){
	console.log(key);
}
//			binaryTree.inOrderTraverse(callback)
//			binaryTree.preOrderTraverse(callback)
//			binaryTree.postOrderTraverse(callback)
console.log('min:'+binaryTree.min())
console.log('max:'+binaryTree.max())	
console.log(binaryTree.search(7)?'key 7 is found':'key 7 is not found')
console.log(binaryTree.search(9)?'key 9 is found':'key 9 is not found')
复制代码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值