Мне нужно проверить два двоичных дерева, чтобы убедиться, что они похожи ... то есть, имеют ли они одинаковую структуру, а затем данные на одинаковых уровнях (но данные не обязательно должны быть в одной структуре) ...
Пример
A A
| | | |
B C C B
| | | | | | | |
D E F G G D E F
Левое двоичное дерево похоже на правое (очевидно, существует множество вариантов!)
Вот мой psuedocode, который у меня есть:
if( tree1 == NULL && tree2 == NULL ) return TRUE;
if( tree1 == NULL || tree2 == NULL ) return FALSE;
if( tree1->label != tree2->label ) return FALSE;
return ( TRUE
&& ( ( similarTrees(tree1->left, tree2->left)
&& similarTrees(tree1->right, tree2->right))
|| ( similarTrees(tree1->left, tree2->right)
&& similarTrees(tree1->right, tree2->left)) ));
Мое рассуждение состояло в том, что, поскольку два левых поддерева могут быть равны, а два правых поддерева могут быть равны ИЛИ левый и правый от одного и правый и левый от другого могут быть равны, то эта логическая рекурсия должна работать ... однако это не так.
SimilarTree - рекурсивная функция
Спасибо за вашу помощь!