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

本文介绍了一种使用VBScript实现二叉树进行排序的方法。通过构建二叉搜索树并利用中序遍历实现数组排序,展示了具体的VBS脚本代码及运行示例。

  数据结构知识:

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

而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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值