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

100 lines
2.7 KiB
Text
Raw Permalink Normal View History

2024-10-16 18:07:41 -07:00
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