RosettaCodeData/Task/Same-fringe/FreeBASIC/same-fringe.basic

100 lines
2.7 KiB
Plaintext

Type Node
As Integer isTuple
As Integer value
As Node Ptr izda
As Node Ptr dcha
End Type
Function CreateNode(value As Integer) As Node Ptr
Dim As Node Ptr n = New Node
n->isTuple = 0
n->value = value
n->izda = 0
n->dcha = 0
Return n
End Function
Function CreateTuple(izda As Node Ptr, dcha As Node Ptr) As Node Ptr
Dim As Node Ptr n = New Node
n->isTuple = 1
n->izda = izda
n->dcha = dcha
Return n
End Function
Sub Fringe(tree As Node Ptr, result() As Integer)
If tree = 0 Then Return
If tree->isTuple Then
Fringe(tree->izda, result())
Fringe(tree->dcha, result())
Else
Redim Preserve result(Ubound(result) + 1)
result(Ubound(result)) = tree->value
End If
End Sub
Function SameFringe(tree1 As Node Ptr, tree2 As Node Ptr) As Boolean
Dim As Integer result1(), result2()
Fringe(tree1, result1())
Fringe(tree2, result2())
If Ubound(result1) <> Ubound(result2) Then Return False
For i As Integer = 0 To Ubound(result1)
If result1(i) <> result2(i) Then Return False
Next
Return True
End Function
' casos de prueba
Dim As Node Ptr A = _
CreateTuple(CreateNode(1), _
CreateTuple(CreateNode(2), _
CreateTuple(CreateNode(3), _
CreateTuple(CreateNode(4), _
CreateTuple(CreateNode(5), _
CreateTuple(CreateNode(6), _
CreateTuple(CreateNode(7), CreateNode(8) )))))))
Dim As Node Ptr B = _
CreateTuple(CreateNode(1), _
CreateTuple(CreateTuple(CreateNode(2), CreateNode(3)), _
CreateTuple(CreateNode(4), _
CreateTuple(CreateNode(5), _
CreateTuple(CreateTuple(CreateNode(6), CreateNode(7)), CreateNode(8) )))))
Dim As Node Ptr X = _
CreateTuple(CreateNode(1), _
CreateTuple(CreateNode(2), _
CreateTuple(CreateNode(3), _
CreateTuple(CreateNode(4), _
CreateTuple(CreateNode(5), _
CreateTuple(CreateNode(6), _
CreateTuple(CreateNode(7), _
CreateTuple(CreateNode(8), CreateNode(9) ))))))))
Dim As Node Ptr Y = _
CreateTuple(CreateNode(0), _
CreateTuple(CreateNode(2), _
CreateTuple(CreateNode(3), _
CreateTuple(CreateNode(4), _
CreateTuple(CreateNode(5), _
CreateTuple(CreateNode(6), _
CreateTuple(CreateNode(7), CreateNode(8) )))))))
Dim As Node Ptr Z = _
CreateTuple(CreateNode(1), _
CreateTuple(CreateNode(2), _
CreateTuple(CreateTuple(CreateNode(4), CreateNode(3)), _
CreateTuple(CreateNode(5), _
CreateTuple(CreateNode(6), _
CreateTuple(CreateNode(7), CreateNode(8) ))))))
Print "tree A and tree A have the same leaves: "; SameFringe(A, A)
Print "tree A and tree B have the same leaves: "; SameFringe(A, B)
Print "tree A and tree X have the same leaves: "; SameFringe(A, X)
Print "tree A and tree Y no have the same leaves: "; Not SameFringe(A, Y)
Print "tree A and tree Z no have the same leaves: "; Not SameFringe(A, Z)
Sleep