数据结构知识:
二叉树中序便历可以用来做排序
而VBS里面恰恰就没有现成的排序方法,因此我写了一个用VBS的二叉树,来解决排序问题,中序便历就是排序。大家可以参考原理,应用到自己的程序中。
<SCRIPTLANGUAGE="vbScript">
classnode
publicdata
publicLnode
publicRnode
subinsert(newData)
ifnewData<datathen
ifIsEmpty(Lnode)then
setLnode=newnode
Lnode.data=newData
else
Lnode.insertnewData
endif
else
ifIsEmpty(Rnode)then
setRnode=newnode
Rnode.data=newData
else
Rnode.insertnewData
endif
endif
endsub
endclass
classtree
publicroot
subinsertNode(newData)
ifIsEmpty(root)then
setroot=newnode
root.data=newData
else
root.insertnewData
endif
endsub
subpreOrderTraversal'前序便历
preOrderroot
document.write"<br/>"
endsub
subinOrderTraversal'中序便历
inOrderroot
document.write"<br/>"
endsub
subpostOrderTraversal'后序便历
postOrderroot
document.write"<br/>"
endsub
PrivatesubpreOrder(N)
ifIsEmpty(N)thenexitsub
document.write""&N.data
preOrderN.Lnode
preOrderN.Rnode
endsub
PrivatesubinOrder(N)
ifIsEmpty(N)thenexitsub
inOrderN.Lnode
document.write""&N.data
inOrderN.Rnode
endsub
PrivatesubpostOrder(N)
ifIsEmpty(N)thenexitsub
postOrderN.Lnode
postOrderN.Rnode
document.write""&N.data
endsub
endclass
'调用示例
setT=newtree
document.write"插入节点"
arr=array(39,69,94,47,50,72,55,41,97,73)
fori=0to9
document.write""&arr(i)
T.insertNodearr(i)
next
document.write"<br/>"
document.write"前序便历"
T.preOrderTraversal
document.write"中序便历"
T.inOrderTraversal
document.write"后序便历"
T.postOrderTraversal
</SCRIPT>
插入节点39699447507255419773
前序便历39694741505594727397
中序便历39414750556972739497
后序便历41555047737297946939
改写成sort(arr)函数
<SCRIPTLANGUAGE="vbScript">
classnode
publicdata
publicLnode
publicRnode
subinsert(newData)
ifnewData<datathen
ifIsEmpty(Lnode)then
setLnode=newnode
Lnode.data=newData
else
Lnode.insertnewData
endif
else
ifIsEmpty(Rnode)then
setRnode=newnode
Rnode.data=newData
else
Rnode.insertnewData
endif
endif
endsub
endclass
classtree
publicroot
publicArr
privateindex
subinsertNode(newData)
ifIsEmpty(root)then
setroot=newnode
root.data=newData
index=0
else
root.insertnewData
endif
endsub
subinOrderTraversal'中序便历
inOrderroot
endsub
PrivatesubinOrder(N)
ifIsEmpty(N)thenexitsub
inOrderN.Lnode
Arr(index)=N.data
index=index+1
inOrderN.Rnode
endsub
endclass
functionsort(arr)
setT=newtree
T.Arr=arr
foreachainarr
T.insertNodea
next
T.inOrderTraversal
sort=T.Arr
endfunction
'-------以上是sort函数部分------
'-------以下是调用示例------
'随便一个数组
arr=array(39,69,94,47,50,72,55,41,97,73)
'显示数组内容
foreachainarr
document.writea&""
next
document.write"<br/>"
'排序处理
arr=sort(arr)
'显示排序后的结果
foreachainarr
document.writea&""
next
</SCRIPT>
输出结果:
39699447507255419773
39414750556972739497