【发布时间】:2015-12-27 04:53:36
【问题描述】:
我需要检查两棵二叉树,看看它们是否相似……这意味着它们是否具有完全相同的结构,然后是相同级别的数据(但数据不需要具有相同的结构) ...
例子
A A
| | | |
B C C B
| | | | | | | |
D E F G G D E F
左二叉树与右二叉树相似(显然有很多变体!)
这是我到目前为止的伪代码:
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 是递归函数
感谢您的帮助!
【问题讨论】:
-
一个小提示:您不需要
TRUE && (...)表达式。只返回没有TRUE &&部分的实际表达式。
标签: c binary-tree