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

时间:2021-05-22

数据结构知识:

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

而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"&nbsp;"&N.data
preOrderN.Lnode
preOrderN.Rnode
endsub
PrivatesubinOrder(N)
ifIsEmpty(N)thenexitsub
inOrderN.Lnode
document.write"&nbsp;"&N.data
inOrderN.Rnode
endsub
PrivatesubpostOrder(N)
ifIsEmpty(N)thenexitsub
postOrderN.Lnode
postOrderN.Rnode
document.write"&nbsp;"&N.data
endsub
endclass
'调用示例

setT=newtree

document.write"插入节点"
arr=array(39,69,94,47,50,72,55,41,97,73)
fori=0to9
document.write"&nbsp;"&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&"&nbsp;"
next
document.write"<br/>"
'排序处理
arr=sort(arr)
'显示排序后的结果
foreachainarr
document.writea&"&nbsp;"
next
</SCRIPT>

输出结果:

39699447507255419773
39414750556972739497

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章