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

(编辑:jimmy 日期: 2024/12/23 浏览:2)

数据结构知识:

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

而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 "&nbsp;" & 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 "&nbsp;" & 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 "&nbsp;" & 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 "&nbsp;" & 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 & "&nbsp;"
next
document.write  "<br/>" 
 '排序处理
arr=sort(arr)
 '显示排序后的结果
for each a in arr 
  document.write  a & "&nbsp;"
next
 </SCRIPT>

输出结果:

39 69 94 47 50 72 55 41 97 73 
39 41 47 50 55 69 72 73 94 97