java - 在二叉树中寻找同构性质的算法

标签 java algorithm data-structures binary-tree

检查两个二叉树本质上是否同构的算法是什么? 我的代码-

boolean isIsomorphic(Root t1 , Root t2){
    if(t1==null || t2==null){
        return false;
    }

    if((t1.value == t2.value) && (isIsomorphic(t1.left,t2.right) && isIsomorphic(t1.right,t2.left))) {
        return true
    }

    return false; 
}

最佳答案

wikipedia article for 'isomorphism'说“如果两个对象是同构的,那么同构保留的任何属性,并且对其中一个对象为真,对另一个对象也为真。”

所以你的问题需要说明你是否关心形状、数据、性能等。

如果您关心用于搜索的二叉树的行为,则您的算法不正确。参见 What does it mean for two binary trees to be isomorphic?

检查同构的最简单方法是按顺序遍历两棵树,检查每一步后的值。

另一方面,如果您关心形状 数据,@amits 修复将为您解决。但请注意,您也可以将其称为完全匹配。

最后,如果你只关心形状,那么你需要放弃检查 t1.value == t2.value

关于java - 在二叉树中寻找同构性质的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10353140/

相关文章:

Java错误: Could not find or load main class undefined

parsing - 如何在 Rust 数据结构中表示递归 EBNF 语法?

c - 双向链表删除函数错误

java - Eclipse 生成 JAXB 类 - cowardly 拒绝写入不存在的目录 "src"

java - ArrayList<HashMap<String, String>> 无法正确转换为 API9 的 JSONArray

c++ - 柏林噪声生成

php - 给定两个数组组合公共(public)值

java - 如何使我的线性探针哈希函数更高效?

arrays - 检查电话数字中单词集合的最快算法

java - 使用 cssSelector 清除 Chrome 浏览器的浏览数据时如何与 #shadow-root (open) 中的元素进行交互