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对其进行掩码。我没有让我的代码工作,所以我不会在这里发布(我会感谢你的第二个想法的实现以及你的改进)。
任何想法如何最有效地进行二叉树的平等检验?
编辑
这个问题假定结构平等。 (不是语义上的平等)
然而,测试语义相似性的代码例如“如果它们的内容相同,我们应该考虑两棵树是相等的,即使它们的结构不是吗?”只是按顺序迭代树,它应该是直接的。
java两二叉树相同_java – 最有效的方式来测试两个二叉树的相等性相关推荐
- java json解析 代码_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- java数组循环扩容_Java中实现数组动态扩容的两种方法
Java中实现数组动态扩容的两种方法 java中初始化一个数组需要定义数组的容量,而在我们使用数组时往往会遇到数组容量不够的情况,此时我们就需要通过动态扩容的方式来来根据需求扩大数组的容量. 我们可以 ...
- java native函数库_Java 层调用 Native 层函数的两种方式
概述 Java 层如何调用Native层函数,大家都应该知道使用JNI(Java 本地接口). 通过在java层声明native方法,然后遵守JNI规范命名Native函数,即可建立Java层nati ...
- java 线程同时启动_java多个线程同时启动的两种方式
[背景]今天遇到一个并发问题,为了在开发环境复现这个bug,需要让多个线程同时执行到某条语句. [解决方案] java1.5的concurrent包下的CyclicBarrier 和 CountDow ...
- 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 ...
- java 假设当前时间_Java如何比较当前时间是否在两个时间范围内
假设ISODateTimeFormat.timeNoMillis()始终是适当的解析器,您希望使用 Interval类.此外,使用 parseLocalTime()而不是parseDateTime() ...
- java改变鼠标图片_Java 将鼠标改为图片的两种方法
一 图片跟着鼠标移动,鼠标隐藏 int x,y; addMouseMotionListener(this);//设置鼠标监听 public void paint(Graphics g) { g.dra ...
- java文件复制速度_java中文件复制得速度测试
//需要将apache开发的两个插件包拷到lib目录下:commons-fileupload-1.2.2.jar commons-io-2.0.1.jar package com.nay.servl ...
- java反射效率对比_Java反射三种方式的效率对比
1 使用field long start = System.nanoTime(); Field[] fields = CallCount.class.getDeclaredFields(); for ...
最新文章
- 驰骋工作流程引擎案例-水质检测工作流程设计开发实现过程
- 安装Windows Storage Server 2008 R2
- 开关电源中的反馈电阻
- DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——21~40
- 【安全漏洞】深入剖析CVE-2021-40444-Cabless利用链
- 【零基础入门数据挖掘】-数据分析
- Scrapy框架学习笔记:猫眼爬虫
- 在SQL Server中取得操作系统文件的最后修改日期 [Z]
- 数据库系统——学习资料(更新.........)
- envi linux 安装教程,Ubuntu下普通用户安装ENVI 4.8
- PMP课程笔记:第9章 项目资源管理
- 大学计算机应用基础第二版习题答案,大学计算机应用基础练习题库及答案.docx...
- 电脑上如何操作Android手机
- 3d建模电脑配置要求
- Android ROM适配基础
- 数据分析——1.环境搭建(Jupyter Lab安装教程)
- Ubuntu 16.04 安装 CUDA Toolkit 10.0
- document.getElementById与getElementsByName的区别(注意后者多个S)
- 腾讯云搭建多终端《你画我猜》Socket服务器
- CTFHUB-技能树-WEB通关
热门文章
- python列表list的基本性质
- Python类三种方法,函数传参,类与实例变量
- escape mysql_MySQL中ESCAPE关键字的用法详解
- ffmpeg与x264有什么区别?
- linux ntptime(Network Time Protocol 网络时间协议)
- 报错: MLPClassifier:ConvergenceWarning: Stochastic Optimizer: Maximum iterations (400) reached
- Gazebo添加模型并控制模型运动作为动态障碍物(Ubuntu16.04, Gazebo7.16),附录动态链接库和静态链接库区别
- python sys模块讲解_python模块之sys模块和序列化模块(实例讲解)
- windows SOCKET编程
- Spring Boot 2 + Redis 对象缓存