首页 > 编程 > VBScript > 正文

用VBS模拟二叉树,可以得到一个排序办法.

2020-06-26 18:05:59
字体:
来源:转载
供稿:网友
数据结构知识: 

二叉树中序便历可以用来做排序 

而VBS里面恰恰就没有现成的排序方法,因此我写了一个用VBS的二叉树,来解决排序问题,中序便历就是排序。大家可以参考原理,应用到自己的程序中。 

<SCRIPT LANGUAGE="vbScript"> 
 class node 
 public data 
 public Lnode 
 public Rnode 
 sub insert(newData) 

  if newData<data then 
   if IsEmpty(Lnode) then 
    set Lnode=new node 
    Lnode.data = newData 
   else 
    Lnode.insert newData 
   end if 
  else 
   if IsEmpty(Rnode) then 
    set Rnode=new node 
    Rnode.data = newData 
   else 
    Rnode.insert newData 
   end if 
  end if 
 end sub 
 end class 

class tree 
 public root 

 sub insertNode(newData) 
  if IsEmpty(root) then 
   set root=new node 
   root.data=newData 
   else 
   root.insert newData 
  end if 
 end sub 

 sub preOrderTraversal'前序便历 
  preOrder root 
  document.write "<br/>" 
 end sub 
 sub inOrderTraversal '中序便历 
  inOrder root 
  document.write "<br/>" 
 end sub 
 sub postOrderTraversal'后序便历 
  postOrder root 
  document.write "<br/>" 
 end sub 

 Private sub preOrder(N) 
  if IsEmpty(N) then exit sub 
  document.write " " & N.data 
  preOrder N.Lnode 
  preOrder N.Rnode   
 end sub 
 Private sub inOrder(N) 
  if IsEmpty(N) then exit sub 
  inOrder N.Lnode 
  document.write " " & N.data   
  inOrder N.Rnode    
 end sub 
 Private sub postOrder(N) 
  if IsEmpty(N) then exit sub 
  postOrder N.Lnode     
  postOrder N.Rnode 
  document.write " " & N.data    
 end sub 
end class 
'调用示例 

set T=new tree 

document.write  "插入节点" 
arr=array(39,69,94,47,50,72,55,41,97,73) 
for i=0 to 9 
 document.write " " & arr(i) 
 T.insertNode  arr(i)  
next 
document.write "<br/>" 
document.write  "前序便历" 
T.preOrderTraversal  
document.write  "中序便历" 
T.inOrderTraversal 
document.write  "后序便历" 
T.postOrderTraversal  
 </SCRIPT> 

  

插入节点 39 69 94 47 50 72 55 41 97 73 
前序便历 39 69 47 41 50 55 94 72 73 97 
中序便历 39 41 47 50 55 69 72 73 94 97 
后序便历 41 55 50 47 73 72 97 94 69 39 

改写成sort(arr)函数  

 <SCRIPT LANGUAGE="vbScript"> 
 class node 
 public data 
 public Lnode 
 public Rnode 
 sub insert(newData) 

  if newData<data then 
   if IsEmpty(Lnode) then 
    set Lnode=new node 
    Lnode.data = newData 
   else 
    Lnode.insert newData 
   end if 
  else 
   if IsEmpty(Rnode) then 
    set Rnode=new node 
    Rnode.data = newData 
   else 
    Rnode.insert newData 
   end if 
  end if 
 end sub 
 end class 

class tree 
 public root  
 public Arr 
 private index 
 sub insertNode(newData) 
  if IsEmpty(root) then 
   set root=new node 
   root.data=newData 
   index=0 
   else 
   root.insert newData 
  end if 
 end sub 

 sub inOrderTraversal '中序便历 
  inOrder root    
 end sub 
 Private sub inOrder(N) 
  if IsEmpty(N) then exit sub 
  inOrder N.Lnode 
  Arr(index)= N.data  
  index=index+1 
  inOrder N.Rnode    
 end sub 

end class 

function sort(arr) 
 set T=new tree 
 T.Arr=arr 
 for each a in arr  
  T.insertNode  a  
 next  
 T.inOrderTraversal  
 sort=T.Arr 
end function 
 '-------以上是sort函数部分------ 
 '-------以下是调用示例------ 
 '随便一个数组 
arr=array(39,69,94,47,50,72,55,41,97,73) 
 '显示数组内容 
for each a in arr  
  document.write  a & " " 
next 
document.write  "<br/>"  
 '排序处理 
arr=sort(arr) 
 '显示排序后的结果 
for each a in arr  
  document.write  a & " " 
next 
 </SCRIPT> 

输出结果: 

39 69 94 47 50 72 55 41 97 73  
39 41 47 50 55 69 72 73 94 97 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表