//先序遍历
function preOrder(node){
if(!node == null){
putstr(node.show()+ " ");
preOrder(node.left);
preOrder(node.right);
}
}
中序遍历:
若树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后是访问根结点,最后中序遍历右子树。
遍历的顺序为:H D I B E J A F K C G
复制代码 代码如下:
//使用递归方式实现中序遍历
function inOrder(node){
if(!(node == null)){
inOrder(node.left);//先访问左子树
putstr(node.show()+ " ");//再访问根节点
inOrder(node.right);//最后访问右子树
}
}
后序遍历:
若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点。
遍历的顺序为:H I D J E B K F G C A
复制代码 代码如下:
//后序遍历
function postOrder(node){
if(!node == null){
postOrder(node.left);
postOrder(node.right);
putStr(node.show()+ " ");
}
}
实现二叉查找树
二叉查找树(BST)由节点组成,所以我们定义一个Node节点对象如下:
复制代码 代码如下:
function Node(data,left,right){
this.data = data;
this.left = left;//保存left节点链接
this.right = right;
this.show = show;
}
function show(){
return this.data;//显示保存在节点中的数据
}
查找最大和最小值
查找BST上的最小值和最大值非常简单,因为较小的值总是在左子节点上,在BST上查找最小值,只需遍历左子树,直到找到最后一个节点
查找最小值
复制代码 代码如下:
function getMin(){
var current = this.root;
while(!(current.left == null)){
current = current.left;
}
return current.data;
}
该方法沿着BST的左子树挨个遍历,直到遍历到BST最左的节点,该节点被定义为:
复制代码 代码如下:
current.left = null;
这时,当前节点上保存的值就是最小值
查找最大值
在BST上查找最大值只需要遍历右子树,直到找到最后一个节点,该节点上保存的值就是最大值。
复制代码 代码如下: