用VBS模拟二叉树,可以得到一个排序办法._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 " " & 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

时间: 2024-09-19 09:34:27

用VBS模拟二叉树,可以得到一个排序办法._vbs的相关文章

VBS模拟POST上传文件的代码_vbs

复制代码 代码如下: 'XML Upload Class Class XMLUpload Private xmlHttp Private objTemp Private adTypeBinary, adTypeText Private strCharset, strBoundary Private Sub Class_Initialize() adTypeBinary = 1 adTypeText = 2 Set xmlHttp = CreateObject("Msxml2.XMLHTTP&qu

模拟javascript中的sort排序(简单实例)_javascript技巧

一.javascript中sort对数据进行排序的原理 sort() 方法对数组的元素做原地的排序,并返回这个数组. sort 可能不是稳定的.默认按照字符串的Unicode码位点排序; 语法:arr.sort([compareFunction]) 参数 compareFunction 可选.用来指定按某种顺序进行排列的函数.如果省略,元素按照转换为的字符串的诸个字符的Unicode位点进行排序. 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前: 如

一个排序用的C++函数模板

前段时间编写MFC程序时,需要对一个字符串集合CStringArray进行排序.标准模板库STL提供的函数模板sort虽然功能强大,但有两个不便: 1. sort使用枚举器(iterator)机制处理C++数组(即指针)和诸如vector这样的STL对象,但MFC集合类CArray.CStringArray没有提供枚举器.虽然可以通过集合类的成员函数GetData把集合转换成指针,然后调用sort进行处理,但这样做破坏了对象的封装性. 2.如果使用降序排序,还需要另外编一个比较函数. 为此我自己

c++-这是一个排序算法,但结果总是不争取,求大神指出错在哪?

问题描述 这是一个排序算法,但结果总是不争取,求大神指出错在哪? #include <stdio.h> #include <stdlib.h> #include <windows.h> #define MAX 100 int b; int arr[MAX],tearr[MAX]; void merge(int a[],int t[],int lhead, int rtail) { int lt, k, mid, rt; mid = (lhead+rtail)/2; lt

acm-怎么先序建立一颗二叉树,输入一个数字比如12,生成12个节点的二叉树,

问题描述 怎么先序建立一颗二叉树,输入一个数字比如12,生成12个节点的二叉树, 如题, 怎么先序建立一颗二叉树,输入一个数字比如12,生成12个节点的二叉树,其叶子节点的左右孩子都为-1(空). 解决方案 根据先序.中序.后序中的两者还原二叉树--递归函数和Csharp泛型

c++-用C++写一个排序的程序

问题描述 用C++写一个排序的程序 题目的意思是 你从键盘录入一系列数,然后你把他按顺序排好,用数组,但要建立类,C++写 解决方案 #include <iostream> using namespace std; class A { public: void print(int* pData, int count){ for (int i = 0; i< count; i++) { cout << pData[i] << " "; } cou

如注释所写问题。。-不明白为什么设计的一个排序无法将string类数据进行排序

问题描述 不明白为什么设计的一个排序无法将string类数据进行排序 #include #include 题目是输入几个字符串(包含大写字母.数字.-,),按照题目给定的对应规律把字符串中的特定字符变为对应数字,形成号码(转换后的号码长度为7),然后按顺序输出号码以及对应的出现次数... using namespace std; class tel { public: int num; string ori;string *alt; tel(int n); tel sort(); void pr

矩阵 排序-计算矩阵中d(i)的值,d为矩阵中所有点值的一个排序

问题描述 计算矩阵中d(i)的值,d为矩阵中所有点值的一个排序 解决方案 图太小,什么也看不见.无非就是二维数组循环,自己写下不难的.

vb-VB里的TrueDbGrid一个排序的问题

问题描述 VB里的TrueDbGrid一个排序的问题 Visula Basic 6.0里的TrueDbGrid怎么实现点击列,根据列重新对数据排序? 解决方案 http://www.newxing.com/Code/VB/dayin/4844.html