java - 用于解决树同构的递归算法?
问题描述
我正在运行代码来检查两棵树是否同构。如果一个可以重新排列以模仿另一个,它们是同构的。只能交换子节点,不能将父节点与子节点交换,反之亦然或以任何其他方式。而且,空树是同构的。
我有一个小的递归代码,它首先处理空指针错误。然后我检查节点是否具有相同的 int,如果它们有,我会递归地调用它们的子节点的每个组合。除了在 null 情况下,它返回 false 的唯一时间是当这些组合之一不相等时。或者至少这就是我想要完成的。
这就是我所拥有的。(注意:我使用空指针异常,因为我必须使用节点对象)。
class GfG
{
public boolean isIsomorphic(Node root1,Node root2)
{
boolean a, b;
a = b = false;
int i;
try{
i = root1.data;
}
catch(NullPointerException ex){
a = true;
}
try{
i = root2.data;
}
catch(NullPointerException ex){
b = true;
}
if(a == true & b == true){
return true;
}
else if((a == false & b == true) | (b ==false & a ==true)){
return false;
}
else {
if(root1.data == root2.data){
isIsomorphic(root1.left, root2.left);
isIsomorphic(root1.right, root2.right);
isIsomorphic(root1.left, root2.right);
isIsomorphic(root1.right, root2.left);
return true;
}
else{
return false;
}
}
}
}
对象 Node 具有和 int 作为属性,它被传递并初始化,两个子节点初始化为 null。(有这样一种情况,它们可以被初始化为 null,因此是 null 异常)。
在这种情况下我应该返回 false,但返回 true,我不知道为什么
0 1 L 0 2 R 1 3 L 1 4 R 2 5 L 2 6 R 3 7 L 3 8 R 4 9 L 4 10 R 5 11 L 5 12 R 6 13 L 6 14 R
0 3 L 0 0 R 3 6 L 3 14 R 0 4 L 0 11 R 6 8 L 6 9 R 14 1 L 14 14 R 4 10 L 4 13 R 11 14 L 11 1 R
解决方案
推荐阅读
- python - Python Idle 3.8.8 vs Python Terminal 3.8.8 round() 格式问题?
- python - 如何根据 Pandas Dataframe 中行的所有列值水平删除一行?
- python - 更高效的产品销售动态规划
- ssl - 空手道:我的服务 APi 需要客户端身份验证证书,证书在类路径中不可用。我必须将它们安装在 docker
- javascript - Bootstrap 5导航栏背景颜色在滚动时不会改变
- html - 如何在 matlabcentral 中发布 html?
- arrays - 二维数组解引用不起作用
- linux - 使用 bash 脚本启用核心转储日志记录
- python - 如何有效地将稀疏矩阵列添加到另一个稀疏矩阵中的每一列?
- windows-subsystem-for-linux - 如何检查 WSL-2 上不断增长的文件的尾部