Advertisement
nein_yards

BST Array Implementation

Oct 5th, 2020 (edited)
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.60 KB | None | 0 0
  1. Const nullPtr As Integer = -1
  2. Dim root As Integer
  3. Dim freeListPtr As Integer
  4.  
  5. Structure TreeNode
  6. Public data As Integer
  7. Public left As Integer
  8. Public right As Integer
  9. End Structure
  10.  
  11. Sub insertNode(ByRef tree() As TreeNode, data As Integer)
  12. Dim currentPtr, previousPtr, newNodePtr As Integer
  13. Dim turnedLeft As Boolean
  14. If freeListPtr <> nullPtr Then
  15. newNodePtr = freeListPtr
  16. freeListPtr = tree(freeListPtr).left
  17. tree(newNodePtr).data = data
  18. tree(newNodePtr).left = nullPtr
  19. tree(newNodePtr).right = nullPtr
  20.  
  21. If root = nullPtr Then
  22. root = newNodePtr
  23. Else
  24. currentPtr = root
  25. While currentPtr <> nullPtr
  26. previousPtr = currentPtr
  27. If tree(currentPtr).data > data Then
  28. turnedLeft = True
  29. currentPtr = tree(currentPtr).left
  30. Else
  31. turnedLeft = False
  32. currentPtr = tree(currentPtr).right
  33. End If
  34. End While
  35. If turnedLeft Then
  36. tree(previousPtr).left = newNodePtr
  37. Else
  38. tree(previousPtr).right = newNodePtr
  39. End If
  40. End If
  41. Else
  42. Console.WriteLine("ERROR - Cannot insert node in full tree.")
  43. End If
  44. End Sub
  45.  
  46. Sub dumpBinaryTree(tree() As TreeNode)
  47. 'displays contents of variables
  48. Console.WriteLine(Environment.NewLine)
  49. Console.WriteLine("head ptr " & root)
  50. Console.WriteLine("free ptr " & freeListPtr)
  51. Console.WriteLine(Environment.NewLine)
  52. Console.WriteLine("LEFT DATA RIGHT")
  53. For Each node In tree
  54. Console.WriteLine(node.left & " " & node.data & " " & node.right)
  55. Next
  56. Console.WriteLine(Environment.NewLine)
  57. End Sub
  58.  
  59. Sub Main()
  60. Dim bst() As TreeNode = newBinarySearchTree(4)
  61.  
  62. Console.WriteLine("INITIAL CONTENTS OF BST")
  63. dumpBinaryTree(bst)
  64.  
  65. insertNode(bst, 6)
  66. insertNode(bst, 9)
  67. insertNode(bst, 2)
  68.  
  69. Console.WriteLine("FINAL CONTENTS")
  70. dumpBinaryTree(bst)
  71. Console.ReadLine()
  72. End Sub
  73.  
  74. Function newBinarySearchTree(maxIndex As Integer) As TreeNode()
  75. If maxIndex < 1 Then
  76. Console.WriteLine("ERROR - Binary Search Tree max index cannot be less than 1.")
  77. End If
  78. root = nullPtr
  79. freeListPtr = 0
  80. Dim tree(maxIndex) As TreeNode
  81. For i = 0 To maxIndex - 1
  82. tree(i).left = i + 1
  83. Next
  84. tree(maxIndex).left = nullPtr
  85. Return tree
  86. End Function
  87.  
  88. Function findNode(tree() As TreeNode, data As Integer) As Integer
  89. Dim currentPtr As Integer = root
  90. While currentPtr <> nullPtr And tree(currentPtr).data <> data
  91. If tree(currentPtr).data > data Then
  92. currentPtr = tree(currentPtr).left
  93. Else
  94. currentPtr = tree(currentPtr).right
  95. End If
  96. End While
  97. Return currentPtr
  98. End Function
  99.  
  100. Function bstMin(tree() As TreeNode) As Integer
  101. If root = nullPtr Then : Return nullPtr : End If
  102. Dim previousPtr, currentPtr As Integer
  103. currentPtr = root
  104. While currentPtr <> nullPtr
  105. previousPtr = currentPtr
  106. currentPtr = tree(currentPtr).left
  107. End While
  108. Return tree(previousPtr).data
  109. End Function
  110.  
  111. Function bstMax(tree() As TreeNode) As Integer
  112. If root = nullPtr Then : Return nullPtr : End If
  113. Dim previousPtr, currentPtr As Integer
  114. currentPtr = root
  115. While currentPtr <> nullPtr
  116. previousPtr = currentPtr
  117. currentPtr = tree(currentPtr).right
  118. End While
  119. Return tree(previousPtr).data
  120. End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement