100 lines
2.7 KiB
Plaintext
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
|