二叉树算法

<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>二叉树算法</title> 
<script type="text/javascript"> 
window.onload = function () {
function Node(data, left, right) {
	this.data = data;
	this.left = left;
	this.right = right;
}

Node.prototype.show = function() {
	return this.data;
}

//建立一个二叉树
function BST() {
	this.root = null;
}

//二叉树的插入操作
BST.prototype.insert = function(data) {
	var n = new Node(data, null, null);
	if(this.root === null) {
		this.root = n;
	}else {
		var current = this.root;
		var parent;
		while(true) {
			parent = current;
			if(data < current.data) {
				current = current.left;
				if(current === null) {
					parent.left = n;
					break;
				}
			}else {
				current = current.right;
				if(current === null) {
					parent.right = n;
					break;
				}
			}
		}
	}
}

//二叉树的历遍操作
BST.prototype.inOrder = function(node) {
	if(!(node === null)) {
		this.inOrder(node.left);
		console.log(node.show());
		this.inOrder(node.right);
	}
}//中序历遍

BST.prototype.preOrder = function(node) {
	if(!(node === null)) {
		console.log(node.show());
		this.inOrder(node.left);
		this.inOrder(node.right);
	}
}//先序历遍

BST.prototype.postOrder = function(node) {
	if(!(node === null)) {
		this.inOrder(node.left);
		this.inOrder(node.right);
		console.log(node.show());
	}
}//后序历遍

BST.prototype.getMin = function() {
	var current = this.root;
	while(!(current.left === null)) {
		current = current.left;
	}
	return current.data;
}//获取最小值

BST.prototype.getMax = function() {
	var current = this.root;
	while(!(current.right === null)) {
		current = current.right;
	}
	return current.data;
}//获取最大值

BST.prototype.find = function(data) {
	var current = this.root;
	while(current !== null) {
		if(current.data === data) {
			return current.data;
		}else if(data < current.data) {
			current = current.left;
		}else {
			current = current.right;
		}
	}
	return null;
}//查找节点

BST.prototype.getSmallest = function(node) {
	if (node.left == null) {
	  return node;
	}
	else {
	  return this.getSmallest(node.left);
	}
}

//删除一个节点,需要传入一个root节点(根节点)
BST.prototype.remove = function(node, data) {
	if(node === null) {
		return null;
	}

	if(data == node.data) {
		if(node.left === null && node.right === null) {
			return null;
		}
		if(node.left === null) {
			return node.right;
		}
		if(node.right === null) {
			return node.left;
		}
		var tempNode = this.getSmallest(node.right); 
		node.data = tempNode.data;
		node.right = remove(node.right, tempNode.data);
		return node;
	}else if(data < node.data) {
		node.left = this.remove(node.left, data);
		return node;
	}else {
		node.right = this.remove(node.right, data);
		return node;
	}
}
var num = new BST();
num.insert(23);
num.insert(45);
num.insert(16);
num.insert(37);
num.insert(3);
num.insert(99);
num.insert(22);
//console.log(num.root);
//num.inOrder(num.root);
//console.log(num.getMin());
//console.log(num.getMax());
num.inOrder(num.root);
console.log(num.remove(num.root,37));
num.inOrder(num.root);
}
</script> 
</head> 
<body> 
</body> 
</html>

  

posted @ 2016-03-21 19:24  PLDaily  阅读(223)  评论(0编辑  收藏  举报