/*
实现二叉查找树 Node类 BST类
*/
function Node(){
this.data = data;
this.left = left;
this.right = right;
this.show = show;
}
function show(){
return this.data;
}
function BST(){
this.root = null;
this.insert = insert;
this.inOrder = inOrder; //中序
this.postOrder = postOrder;
this.preOrder = preOrder;
}
function insert(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;
while(data < current.data){
current = current.left;
if(current ==null){
parent.left = n;
break;
}
}
else{
current = current.right;
if(current ==null){
parent.right = n;
break;
}
}
}
}
}
function inOder(node){
if(!(node ==null)){
inOder(node.left);
putstr(node.show() + " ");
inOrder(node.right);
}
}
//先序
function preOrder(node) {
if (!(node == null)) {
putstr(node.show() + " ");
preOrder(node.left);
preOrder(node.right);
}
}
//后序
function postOrder(node) {
if (!(node == null)) {
postOrder(node.left);
postOrder(node.right);
putstr(node.show() + " ");
}
}
测试
var nums = new BST();
nums.insert(23);
nums.insert(45);
nums.insert(16);
nums.insert(37);
nums.insert(3);
nums.insert(99);
nums.insert(22);
console.log("Inorder traversal: ");
inOrder(nums.root);
console.log("preOrder traversal: ");
preOrder(nums.root);
console.log("Postorder traversal: ");
postOrder(nums.root);