2017年5月21日 星期日

vb版 BST建立及巡訪

一個TextBox1輸入5~30個皆不相同的整數以「,」隔開
一個Label1顯示輸出
一個按鈕,執行(1)建二元搜尋樹,(2)在Label1顯示{前序、中序、後序}巡訪結果
程式碼如下:
Public Class Form1
    Class BT
        Public data As Integer
        Public lch As BT
        Public rch As BT
        Sub New()
            lch = Nothing
            rch = Nothing
        End Sub
    End Class
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim dat() = TextBox1.Text.Split(",")    '依 , 分割為 陣列
        Dim rt As BT = Nothing  '一開始 樹根為 nothing
        For i = 0 To UBound(dat)
            Dim k As Integer = dat(i)
            add(k, rt)                             '新增 1 node
        Next
        Dim s As String = "" : pre(s, rt)   '前序
        Label1.Text = "前序:" & s

        s = "" : ino(s, rt)   '中序
        Label1.Text &= vbNewLine
        Label1.Text &= "中序:" & s

        s = "" : pos(s, rt)   '後序
        Label1.Text &= vbNewLine
        Label1.Text &= "後序:" & s
    End Sub

    '將資料 k 新增至 樹根為 root 的 bst 樹中
    Sub add(ByVal k As Integer, ByRef root As bt)
        Dim node As New BT
        node.data = k
        If root Is Nothing Then
            root = node
            Return
        End If
        If k < root.data Then
            add(k, root.lch)
        Else
            add(k, root.rch)
        End If
    End Sub

    ' 前序巡訪
    Sub pre(ByRef s As String, ByVal node As bt)
        If node Is Nothing Then Return
        If s <> "" Then s &= ","
        s &= node.data
        pre(s, node.lch)
        pre(s, node.rch)
    End Sub
 
 ' 中序巡訪
    Sub ino(ByRef s As String, ByVal node As bt)
        If node Is Nothing Then Return
        ino(s, node.lch)
        If s <> "" Then s &= ","
        s &= node.data
        ino(s, node.rch)
    End Sub
 
  ' 後序巡訪
    Sub pos(ByRef s As String, ByVal node As bt)
        If node Is Nothing Then Return
        pos(s, node.lch)
        pos(s, node.rch)
        If s <> "" Then s &= ","
        s &= node.data
    End Sub

End Class

Related Posts:

  • 找零使用最少硬幣(VB版)輸入第一列 t 代表有 t 組資料,每組2列:第1列  n 種 ,  m元,第2列 n 種的面額 範例輸入: 3 5 50 1 3 5 7 13 5 50 1 5 6 7 15 8 125 1 2 3 10 11 12 20 21 範例輸出 6 4 6 參考程式碼:  … Read More
  • 北二區101-4王者之路(VB版) 參考程式碼:     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load      … Read More
  • 萬球同心移位( VB參考)' 測試資料改為第1行為 t 組,0<t<9,接著每組 第1列n  m ,接著 m列 ' 有n個球編號0~n-1{ 3<n<5*10^5},先將n個球依順時鐘圍成一圈 ' m個指令F A B 或R A B {2<m<10^3} ' F A… Read More
  • 萬球同心移位之章 最後輸出 0的逆鄰及順鄰 Rlink[0]、Flink[0] 即 1 3 當然若 A B同一編號不處理,A已位於要移至之處也不需處理… Read More
  • 北二區101-2小三數學(vb版) 參考程式碼:       Const inf As Long = 1.0E+18     Dim n, m As Long     Dim s As String     Function cal(B… Read More

0 意見:

張貼留言