SOURCE

console 命令行工具 X clear

                    
>
console
<script>

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

function BinaryTrees(){
	this.root = null;
}
BinaryTrees.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; 
					}
				} 
			}
		}
	},
	inOrder: function(node) {
		if (!(node == null)) {
			this.inOrder(node.left);
			document.writeln(node.show() + " ");
			this.inOrder(node.right);
		}
	},
	preOrder: function(node) {
		if (!(node == null)) {
			document.writeln(node.show() + " ");
			this.preOrder(node.left);
			this.preOrder(node.right);
		} 
	},
	Postorder: function(node){
		if (!(node == null)) {
			this.preOrder(node.left);
			this.preOrder(node.right);
			document.writeln(node.show() + " ");
		} 
	},
	getMin: function(){
		var current = this.root;
		while(!(current.left == null)){
			current = current.left;
		}
		return current.data;
	},
	getMax: function(){
		var current = this.root;
		while (!(current.right == null)) {
           current = current.right;
        }
        return current.data;
	},
	find: function(data){
		var current = this.root;
		while(current != null){
			if(current.data == data){
				return current;
			} else if(data < current.data){
				current = current.left;
			} else {
				current = current.right;
			}
		}
		return null;
	},
	remove : function(data) {
		this.root = removeNode(this.root, data);
	},

	removeNode: 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 = getSmallest(node.right);
			node.data = tempNode.data;
			node.right = removeNode(node.right, tempNode.data);
			return node;
		} else if (data < node.data) {
			node.left = removeNode(node.left, data);
			return node;
		} else {
			node.right = removeNode(node.right, data);
			return node;
		} 
	}
}
var nums = new BinaryTrees();
nums.insert(23);
nums.insert(45);
nums.insert(16);
nums.insert(37);
nums.insert(3);
nums.insert(99);
nums.insert(22);
console.log(nums)
document.writeln("Inorder traversal: ");
nums.inOrder(nums.root);
document.writeln("</br>")
document.writeln("Preorder traversal: ");
nums.preOrder(nums.root);
document.writeln("</br>")
document.writeln("Postorder traversal: ");
nums.Postorder(nums.root);


document.writeln("</br>")
var min = nums.getMin();
document.writeln("The minimun value:  " + min);
document.writeln("</br>")
var max = nums.getMax();
document.writeln("The maximun value:  " + max);

document.writeln("</br>")
var num = 1;
var found = nums.find(num);
if(found != null){
	document.writeln(num + " in tree")
} else {
	document.writeln(num + " not found in tree")
}

</script>