我需要检查两个二叉树以查看它们是否相似...意味着它们是否具有完全相同的结构,然后是相同级别的数据(但数据不需要在相同的结构中) ...
实施例
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是递归函数
感谢您的帮助!
答案 0 :(得分:2)
代码和示例不匹配。
如果每个子树包含相同的根标签和相同的子节点,则代码假定树是相等的,尽管是以任意顺序。
另一方面,这个例子不适用于此。例如,在左侧树中,C
的子项为F
和G
,而右侧为G
和D
。
要编写代码以检查它们是否相似,您必须首先明确定义相似的含义。例如。应该在两棵树上都有标签。它应该存在于同一水平吗?可以不止一次出现吗?
答案 1 :(得分:0)
你可以解决他们第一步的结构是否相同,并使用我的步骤进行第二步
对于树级别,您可以将同一级别的数据收集到同一组(或排序列表)中
显然,如果树的所有级别集都等于另一棵树,并且它们具有相同的结构,那么这两棵树是相似的
答案 2 :(得分:0)