Ваша функция недействительна, потому что, по крайней мере, в этой части функции
template <class T>
bool BST<T>::similarStructure( BST Tree2 )
{
if (isEmpty()) {
cout << "tree is empty\n";
return;
}
//...
она ничего не возвращает, хотя функция имеет тип возвращаемого значения bool.
Используя ваш подход, функция может выглядеть следующим образом:
template <class T>
bool BST<T>::similarStructure( const BST &Tree2 ) const
{
if ( isEmpty() && Tree2.isEmpty() ) return true;
StackArray<node<T>> s1, s2;
s1.Push( root );
s2.Push( tree2.root );
bool theSame = true;
while ( theSame && !s1.isEmpty() )
{
node<T> n = s1.Pop();
node<T> n1 = s2.Pop();
theSame = ( n->right != NULL ) == ( n1->right != NULL );
if ( theSame && n->right != NULL )
{
s1.Push( n->right );
s2.Push( n1->right );
}
if ( theSame )
{
theSame == ( n->left != NULL ) == ( n->left != NULL );
if ( theSame && n->left != NULL )
{
s1.Push( n->left );
s2.Push( n1->left );
}
}
}
return theSame;
}
Обратите внимание, что функция объявлена с квалификатором const
. Это означает, что функция-член isEmoty
класса BST<T>
также должна быть объявлена с квалификатором const
.
bool isEmpty() const;