java两二叉树相同_java – 最有效的方式来测试两个二叉树的相等性

您将如何在Java中实现二叉树节点类和二叉树类以支持最有效(从运行时角度)相等的检查方法(也必须实现):

boolean equal(Node root1, Node root2) {}

要么

boolean equal(Tree t1, Tree t2) {}

首先,我创建了Node类,如下所示:

public class Node {

private Node left;

private Node right;

private T data;

// standard getters and setters

}

然后使用等于2个根节点作为参数并运行标准递归比较的equals方法:

public boolean equals(Node root1, Node root2) {

boolean rootEqual = false;

boolean lEqual = false;

boolean rEqual = false;

if (root1 != null && root2 != null) {

rootEqual = root1.getData().equals(root2.getData());

if (root1.getLeft()!=null && root2.getLeft() != null) {

// compare the left

lEqual = equals(root1.getLeft(), root2.getLeft());

}

else if (root1.getLeft() == null && root2.getLeft() == null) {

lEqual = true;

}

if (root1.getRight() != null && root2.getRight() != null) {

// compare the right

rEqual = equals(root1.getRight(), root2.getRight());

}

else if (root1.getRight() == null && root2.getRight() == null) {

rEqual = true;

}

return (rootEqual && lEqual && rEqual);

}

return false;

}

我的第二个尝试是使用数组和索引来实现树的遍历。然后可以使用两个数组上的按位操作(AND)进行比较:从2个数组中读取块,并使用逻辑AND对其进行掩码。我没有让我的代码工作,所以我不会在这里发布(我会感谢你的第二个想法的实现以及你的改进)。

任何想法如何最有效地进行二叉树的平等检验?

编辑

这个问题假定结构平等。 (不是语义上的平等)

然而,测试语义相似性的代码例如“如果它们的内容相同,我们应该考虑两棵树是相等的,即使它们的结构不是吗?”只是按顺序迭代树,它应该是直接的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值