Reverse spiral traversal of a binary tree in vb.net
Vb program for Reverse spiral traversal of a binary tree. Here problem description and other solutions.
' Include namespace system
Imports System
' Vb.net program for
' Reverse level order traversal in spiral form
' Binary Tree Node
Public Class TreeNode
Public data As Integer
Public left As TreeNode
Public right As TreeNode
Public Sub New(ByVal data As Integer)
' Set node value
Me.data = data
Me.left = Nothing
Me.right = Nothing
End Sub
End Class
' Stack node
Public Class StackNode
' Stack data
Public element As TreeNode
Public [next] As StackNode
Public Sub New(ByVal element As TreeNode, ByVal top As StackNode)
Me.element = element
Me.next = top
End Sub
End Class
' Define a custom stack
Public Class MyStack
Public top As StackNode
Public size As Integer
Public Sub New()
' Set node values
Me.top = Nothing
Me.size = 0
End Sub
' Add node at the top of stack
Public Sub push(ByVal element As TreeNode)
Me.top = New StackNode(element, Me.top)
Me.size += 1
End Sub
Public Function isEmpty() As Boolean
if (Me.size > 0 AndAlso Me.top IsNot Nothing) Then
Return False
Else
Return True
End IF
End Function
' Remove top element of stack
Public Sub pop()
if (Me.size > 0 AndAlso Me.top IsNot Nothing) Then
' Change top element of stack
Me.top = Me.top.[next]
Me.size -= 1
End If
End Sub
' Return top element of stack
Public Function peek() As TreeNode
if (Me.size = 0) Then
Return Nothing
End If
Return Me.top.element
End Function
End Class
public Class BinaryTree
Public root As TreeNode
Public Sub New()
' Set initial tree root
Me.root = Nothing
End Sub
' Display tree element in reverse spiral level order traversal
Public Sub reverseSpiral()
if (Me.root Is Nothing) Then
' Case
' When empty
Console.WriteLine("Empty Tree")
Return
End If
' Empty stack
Dim s1 As MyStack = New MyStack()
Dim s2 As MyStack = New MyStack()
Dim result As MyStack = New MyStack()
' Some auxiliary variable
Dim status As Integer = 1
Dim node As TreeNode = Me.root
' Add first node
s1.push(node)
while (node IsNot Nothing)
' Add node element into resultant stack
result.push(node)
if (status = 1) Then
' Add node from right to left
' in s2 stack
if (node.right IsNot Nothing) Then
' Add right child
s2.push(node.right)
End If
if (node.left IsNot Nothing) Then
' Add left child
s2.push(node.left)
End If
Else
' Add node from left to right
' in s1 stack
if (node.left IsNot Nothing) Then
' Add left child
s1.push(node.left)
End If
if (node.right IsNot Nothing) Then
' Add right child
s1.push(node.right)
End If
End IF
if (status = 1) Then
' Case A
' When execute s1 stack
' Remove s1 element
s1.pop()
if (s1.isEmpty()) Then
' When after remove s1 element
' s1 stack empty.
' Then change stack by s2
status = 2
' Get first element of s2
node = s2.peek()
Else
' Otherwise get new top
node = s1.peek()
End IF
Else
' Case B
' When execute s2 stack
' Remove s2 element
s2.pop()
if (s2.isEmpty()) Then
' Here change stack
status = 1
node = s1.peek()
Else
node = s2.peek()
End IF
End IF
End While
' Display final result
while (result.isEmpty() = False)
' Get top element
node = result.peek()
' Display node value
Console.Write(" " + node.data.ToString())
' Remove top of stack
result.pop()
End While
End Sub
Public Shared Sub Main(ByVal args As String())
' Create new tree
Dim tree As BinaryTree = New BinaryTree()
' Make A Binary Tree
' ---------------
' 1
' / \
' / \
' 2 3
' / / \
' 4 5 6
' \ \ \
' 7 8 9
' Add node
tree.root = New TreeNode(1)
tree.root.left = New TreeNode(2)
tree.root.right = New TreeNode(3)
tree.root.right.right = New TreeNode(6)
tree.root.right.left = New TreeNode(5)
tree.root.left.left = New TreeNode(4)
tree.root.left.left.right = New TreeNode(7)
tree.root.right.left.right = New TreeNode(8)
tree.root.right.right.right = New TreeNode(9)
' Display reverse spiral level order element
tree.reverseSpiral()
End Sub
End Class
Output
9 8 7 4 5 6 3 2 1
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment