c - 如何查看2个二叉树是否相似?

标签 c binary-tree

我需要检查两个二叉树,看看它们是否相似...意思是它们是否具有完全相同的结构,然后数据位于相同的级别(但数据不需要处于相同的结构) ...

示例

     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是递归函数

感谢您的帮助!

最佳答案

代码和示例不匹配。

如果每个子树包含相同的根标签和相同的子树(尽管顺序是任意的),则代码假定树是相等的。

另一方面,该示例并不适用于此。例如,在左侧树中,C 的子级是 FG,而在右侧 GD

要编写代码来检查它们是否相似,您必须首先明确定义相似的含义。例如。两棵树中是否都存在标签。它应该存在于同一级别吗?它可以发生多次吗?

关于c - 如何查看2个二叉树是否相似?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8922543/

相关文章:

c - C 中带有函数的 realloc 结构

gcc -o和-S可以一起用吗

c - 如何在for循环中输入if语句?

c++ - 这个实例中#define 的 Action 是什么?

java - 我必须创建一个二元表达式树来存储 java 中的表达式 2 + 4 - 3

c - 如何在 C 中解析

c - 二叉树,我哪里错了?

javascript - 无法理解二叉树 DFS 的递归部分

c - 如何按名称(字符串)搜索和排序 BST?按队列打印并缩进?

c++ - C++-如何计算比较程序在二进制树中查找值所花费的次数