js二叉树

function BinarySearchTree() {
	var Node = function(key){
		this.key = key;
		this.left = null;
		this.right = null;
	}
	var root = null;
	var i = 0;
	this.insert = function(key){
	var newNode = new Node(key); //{1}
		if (root === null){ //{2}
			root = newNode;
		} else {
			insertNode(root,newNode); //{3}
		}
	}
	var insertNode = function(node,newnode){
		if(node.key>newnode.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.inOrderTraverse = function(callback){
		inOrderTraverseNode(root, callback); //{1}
	}
	//中序遍历 最深的左边子节点开始 到此节点父节点 到 此节点父节点的右边节点 一级级往上
	/**中序遍历是一种以上行顺序访问BST所有节点的遍历方式,也就是以从最小到最大的顺序访问所有节点**/
	var inOrderTraverseNode = function (node, callback) {
		if (node !== null) { //{2}
		inOrderTraverseNode(node.left, callback); //{3}
		printNode(node.key); //{4}
		inOrderTraverseNode(node.right, callback); //{5}
		}
	};
	/**先序遍历是以优先于后代节点的顺序访问每个节点的。先序遍历的一种应用是打印一个结构化的文档**/
	var perTraverseNode = function (node, callback) {
		if (node !== null) { //{2}
		printNode(node.key); //{4}
		perTraverseNode(node.left, callback); //{3}
		perTraverseNode(node.right, callback); //{5}
		}
	};
	/**后序遍历则是先访问节点的后代节点,再访问节点本身。后序遍历的一种应用是计算一个目录和它的子目录中所有文件所占空间的大小**/
	var postTraverseNode = function (node, callback) {
		if (node !== null) { //{2}
		postTraverseNode(node.left, callback); //{3}
		postTraverseNode(node.right, callback); //{5}
		printNode(node.key); //{4}
		}
	};
	/**搜索最大值**/
	this.max = function(){
		return maxNode(root);
	}
	var maxNode = function(node){
		if(node == null){
			return false;
		}
		if(node){
			while(node&&node.right!=null){
				node = node.right;
			}
			return node.key;
		}
		return null;
	}
	this.search = function(key){
		return searchNode(root, key); //{1}
	};
	var searchNode = function(node, key){
		if (node === null){ //{2}
		return false;
	}
	if (key < node.key){ //{3}
		return searchNode(node.left, key); //{4}
	} else if (key > node.key){ //{5}
		return searchNode(node.right, key); //{6}
	} else {
		return true; //{7}
	}
	};
	function printNode(value){ //{6}
		console.log(value);
	}
 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值