您将如何在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对其进行掩码。我没有让我的代码工作,所以我不会在这里发布(我会感谢你的第二个想法的实现以及你的改进)。

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

编辑

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

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

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

  1. java json解析 代码_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  2. java数组循环扩容_Java中实现数组动态扩容的两种方法

    Java中实现数组动态扩容的两种方法 java中初始化一个数组需要定义数组的容量,而在我们使用数组时往往会遇到数组容量不够的情况,此时我们就需要通过动态扩容的方式来来根据需求扩大数组的容量. 我们可以 ...

  3. java native函数库_Java 层调用 Native 层函数的两种方式

    概述 Java 层如何调用Native层函数,大家都应该知道使用JNI(Java 本地接口). 通过在java层声明native方法,然后遵守JNI规范命名Native函数,即可建立Java层nati ...

  4. java 线程同时启动_java多个线程同时启动的两种方式

    [背景]今天遇到一个并发问题,为了在开发环境复现这个bug,需要让多个线程同时执行到某条语句. [解决方案] java1.5的concurrent包下的CyclicBarrier 和 CountDow ...

  5. java excel解析视频教程_java解析Excel(xls、xlsx两种格式)

    一.需要导入的jar 1.commons-collections4-4.1.jar 2.poi-3.17-beta1.jar 3.poi-ooxml-3.17-beta1.jar 4.poi-ooxm ...

  6. java 假设当前时间_Java如何比较当前时间是否在两个时间范围内

    假设ISODateTimeFormat.timeNoMillis()始终是适当的解析器,您希望使用 Interval类.此外,使用 parseLocalTime()而不是parseDateTime() ...

  7. java改变鼠标图片_Java 将鼠标改为图片的两种方法

    一 图片跟着鼠标移动,鼠标隐藏 int x,y; addMouseMotionListener(this);//设置鼠标监听 public void paint(Graphics g) { g.dra ...

  8. java文件复制速度_java中文件复制得速度测试

    //需要将apache开发的两个插件包拷到lib目录下:commons-fileupload-1.2.2.jar  commons-io-2.0.1.jar package com.nay.servl ...

  9. java反射效率对比_Java反射三种方式的效率对比

    1 使用field long start = System.nanoTime(); Field[] fields = CallCount.class.getDeclaredFields(); for ...

最新文章

  1. 驰骋工作流程引擎案例-水质检测工作流程设计开发实现过程
  2. 安装Windows Storage Server 2008 R2
  3. 开关电源中的反馈电阻
  4. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——21~40
  5. 【安全漏洞】深入剖析CVE-2021-40444-Cabless利用链
  6. 【零基础入门数据挖掘】-数据分析
  7. Scrapy框架学习笔记:猫眼爬虫
  8. 在SQL Server中取得操作系统文件的最后修改日期 [Z]
  9. 数据库系统——学习资料(更新.........)
  10. envi linux 安装教程,Ubuntu下普通用户安装ENVI 4.8
  11. PMP课程笔记:第9章 项目资源管理
  12. 大学计算机应用基础第二版习题答案,大学计算机应用基础练习题库及答案.docx...
  13. 电脑上如何操作Android手机
  14. 3d建模电脑配置要求
  15. Android ROM适配基础
  16. 数据分析——1.环境搭建(Jupyter Lab安装教程)
  17. Ubuntu 16.04 安装 CUDA Toolkit 10.0
  18. document.getElementById与getElementsByName的区别(注意后者多个S)
  19. 腾讯云搭建多终端《你画我猜》Socket服务器
  20. CTFHUB-技能树-WEB通关

热门文章

  1. python列表list的基本性质
  2. Python类三种方法,函数传参,类与实例变量
  3. escape mysql_MySQL中ESCAPE关键字的用法详解
  4. ffmpeg与x264有什么区别?
  5. linux ntptime(Network Time Protocol 网络时间协议)
  6. 报错: MLPClassifier:ConvergenceWarning: Stochastic Optimizer: Maximum iterations (400) reached
  7. Gazebo添加模型并控制模型运动作为动态障碍物(Ubuntu16.04, Gazebo7.16),附录动态链接库和静态链接库区别
  8. python sys模块讲解_python模块之sys模块和序列化模块(实例讲解)
  9. windows SOCKET编程
  10. Spring Boot 2 + Redis 对象缓存