用java比较两个二叉搜索树是否等价

一. 定义树的的节点

​ 不同二叉树的叶节点上可以保存相同的值序列。例如,以下两个二叉树都保存了序列 1,1,2,3,5,8,13
在这里插入图片描述

package com.wedoo.coderyeah.module.iot.algorithm;import lombok.Data;/*** @author lqs* @date 2023/12/6 15:23*/
@Data
public class TreeNode { // 比较两个二叉搜索树是否等价private TreeNode Left; // 左边的树结构private Integer Value; // 树节点的数值private TreeNode Right; // 右边的树结构// 构造方法TreeNode(int x) {Value = x;}
}

二. 具体实现

package com.wedoo.coderyeah.module.iot.algorithm;import java.util.ArrayList;
import java.util.List;/*** @author lqs* @date 2023/12/6 15:27*/
public class BinaryTree {// 用于保存每个节点值 public static void saveNodeValues(TreeNode node, List<Integer> list) {if (node == null) {return;}// 递归调用自己 左树saveNodeValues(node.getLeft(), list);// 将值保存在集合中 最后所得是整棵树的各节点值list.add(node.getValue());// 递归调用自己 右树saveNodeValues(node.getRight(), list);}// 用于比较两棵树是否等价public static Boolean compare(TreeNode tree1, TreeNode tree2) {// 准备集合保存节点值List<Integer> list1 = new ArrayList<>();List<Integer> list2 = new ArrayList<>();saveNodeValues(tree1, list1);saveNodeValues(tree2, list2);System.out.println("list1:" + list1);//list1:[2, 1, 9]System.out.println("list2:" + list2);//list2:[2, 1, 3]// 比较集合是否相等return list1.equals(list2);}public static void main(String[] args) {// 构造第一颗二叉树TreeNode treeNode = new TreeNode(1);treeNode.setLeft(new TreeNode(2));treeNode.setRight(new TreeNode(3));// 构造第二颗二叉树TreeNode treeNode2 = new TreeNode(1);treeNode2.setLeft(new TreeNode(2));treeNode2.setRight(new TreeNode(9));Boolean aBoolean = compare(treeNode2, treeNode);System.out.println("aBoolean: " + aBoolean);}
}

三. GO实现

package mainimport ("fmt""golang.org/x/tour/tree"
)// 二叉树查找比较 等价二叉查找树
func main() {t1 := tree.New(1)t2 := tree.New(1)b := compare(t1, t2)fmt.Println("t1==t2:", b)
}func Walk(t *tree.Tree, ch chan int) {if t == nil { // 空树 没有叶子节点return // 递归函数结束条件}Walk(t.Left, ch)ch <- t.ValueWalk(t.Right, ch)
}func compare(t1, t2 *tree.Tree) bool {c1 := make(chan int) // 管道 传递数据 无缓冲默认1,按顺序传递数据c2 := make(chan int)go Walk(t1, c1)go Walk(t2, c2)for i := 0; i < 10; i++ {x, y := <-c1, <-c2fmt.Println(x, y)if x != y {return false}}return true
}
0; i++ {x, y := <-c1, <-c2fmt.Println(x, y)if x != y {return false}}return true
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CentOS】配置 Apache 服务

yum install httpd -y# 查看是否安装成功 httpd -v # 出现版本号表示成功# 启动服务 systemctl start httpd# 查看状态 systemctl status httpd # running 即可成功 ● httpd.service - The Apache HTTP ServerLoaded: loaded (/usr/lib/systemd/system/httpd.service; disable…

Redlock算法实现Redis分布式锁

Redlock算法实现Redis分布式锁 为什么基于故障转移的实现还不够 使用 Redis 锁定资源的最简单方法是在实例中创建密钥。密钥通常是在有限的生存时间内创建的&#xff0c;使用 Redis 过期功能&#xff0c;以便最终它被释放&#xff08;我们列表中的属性 2&#xff09;。当客户…

每日一题 2646. 最小化旅行的价格总和(困难,树)

分解为两个子问题&#xff0c;树中节点到节点的路径问题&#xff0c;价格减半树的最小值问题由于它是无向的树&#xff0c;所以对于每一次旅行&#xff0c;以 start 为根&#xff0c;通过dfs寻找 end 就可以很简单地找到需要的路径且它是唯一的&#xff0c;这里我们统计每经过一…

Splashtop 荣获 SDC“年度安全供应商”奖

2023年12月5日 荷兰阿姆斯特丹 Splashtop 是随处办公环境改革的先驱&#xff0c;在伦敦举办的第14届 SDC 颁奖典礼上荣获“年度安全供应商”奖&#xff0c;我们对此感到十分自豪。荣获这一知名奖项凸显了 Splashtop 致力于通过企业级加密和基于权限的访问保护不同规模组织的决…

iis--IIS8中安装和使用URL重写工具(URL Rewrite)的方法

URL重写-下载 IIS8中安装和使用URL重写工具(URL Rewrite)的方法 IIS版本号可以被识别&#xff0c;修复图解&#xff0c;亲测有效

我的NPI项目之Android 安全系列 -- 天地混沌初开

最近在因为有新项目启动&#xff0c;目前处在kickoff之后research阶段&#xff0c;预计在1st March能拿到到Pre-EVT&#xff1b; 在此之前最主要的就是需求分析/可行性分析/风险评估。 而对于软件来说&#xff0c;作为传说中的software project leader&#xff0c;要做的最重要…

运维之远程桌面连接失败问题排查

背景&#xff1a;同一局域网&#xff0c;可以ping通但是远程连接不上&#xff0c;排查一下问题。 1、被远程计算机是否允许远程连接 2、被远程计算机防火墙是否允许 3、被远程计算机远程桌面服务是否正常 4、查看用户权限

mfc项目设置软件版本

//上面设置的版本通过下面的代码可以获取到 TSTRING CVersion::GetSoftVersion() {TSTRING strVer _T("");TCHAR szPath[MAX_PATH] _T("");memset(szPath, 0, sizeof(szPath));::GetModuleFileName(NULL, szPath, sizeof(szPath));//得到本程序的目录UIN…

使用Navicat连接MySQL出现的一些错误

目录 一、错误一&#xff1a;防火墙未关闭 二、错误二&#xff1a;安全组问题 三、错误三&#xff1a;MySQL密码的加密方式 四、错误四&#xff1a;修改my.cnf配置文件 一、错误一&#xff1a;防火墙未关闭 #查看防火墙状态 firewall-cmd --state#关闭防…

在Linux上优化HTTP服务器的性能

在Linux上优化HTTP服务器的性能是一个涉及多个方面的任务&#xff0c;包括服务器硬件、网络设置、软件配置和内容优化。以下是一些关键的优化建议&#xff1a; 选择合适的HTTP服务器软件 Linux上有多种HTTP服务器软件&#xff0c;如Apache、Nginx、Lighttpd等。选择适合您需求…

nodeJS爬虫-爬取虎嗅新闻

1.安装依赖库到本地&#xff0c;需要的库有&#xff1a;安装方法见Node.js笔记说明 const superagent require(superagent); const cheerio require(cheerio); const async require(async); const fs require(fs); const url require(url); const request require(reques…

Python文件打包成exe可执行文件

我们平常用python写些脚本可以方便我们的学习办公&#xff0c;但限制就是需要有python环境才能运行。 那能不能直接在没有python环境的电脑上运行我们的脚本呢&#xff1f; 当然可以&#xff0c;那就是直接把python脚本打包成exe可执行程序&#xff08;注针对win系统&#xf…

什么是数字化工厂?

数字化工厂通常需要资金和技术支持&#xff0c;对大企业来说更容易投入建设。 中小企业难道就毫无机会了吗&#xff1f; 当然不是。中小企业也能够实现数字化工厂&#xff0c;只是可能需要采取不同的策略。虽然中小企业可能面临资源有限的挑战&#xff0c;但通过渐进式的方式和…

品牌咨询策划服务预约小程序作用是什么

对很多行业公司来说&#xff0c;想要在竞争激烈的市场中生存和长期发展&#xff0c;就需要不断完善自身服务和信息流程、规范化。品牌咨询策划公司是企业发展中重要的合作伙伴。 二者都有寻找对方的需求&#xff0c;尤其是对咨询策划公司来说需要不断宣传推广品牌和服务来获得…

服务器数据恢复—重装系统导致XFS文件系统分区丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 服务器使用磁盘柜RAID卡搭建了一组riad5磁盘阵列。服务器上层分配了一个LUN&#xff0c;划分了两个分区&#xff1a;sdc1分区和sdc2分区。通过LVM扩容的方式&#xff0c;将sdc1分区加入到了root_lv中&#xff1b;sdc2分区格式化为XFS文件系统。…

Avalonia中使用Prism实现区域导航功能

前言 上一篇文章我们讲了在Avalonia开发中&#xff0c;引入Prism框架来完成项目的MVVM迁移。本章内容将带领大家学习如何在Avalonia中使用Prism框架实现区域导航功能。如果你还不知道Avalonia中如何引入Prism框架&#xff0c;请看我上一篇文章&#xff1a;Avalonia框架下面使用…

跨文化合作指南:与海外网红沟通的不可忽视的文化差异

随着社交媒体的飞速发展&#xff0c;海外网红在全球范围内崭露头角&#xff0c;成为品牌推广和文化传播的重要力量。然而&#xff0c;由于不同国家和地区存在着独特的文化差异&#xff0c;与海外网红进行沟通合作时&#xff0c;我们必须认真对待文化差异&#xff0c;以确保合作…

Python-赋值运算符(详解)

表示赋值 左侧为变量&#xff0c;右边为值 a b 10#先把10赋值给b&#xff0c;再把b赋值给a 相当于a 10 b 10 链式赋值&#xff0c;但是不推荐&#xff0c;一般一行一个语句&#xff0c;提高可读性&#xff0c;良好的代码风格 多元赋值&#xff1a; a , b 10,20 #python语…

Word使用相关——(待完善)

1.word 怎样删除分节符 2.word 怎样删除目录中的分节符 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我…

时序数据库TDengine安装及c#连接读写数据

物联网数据采集&#xff0c;需写入大量数据&#xff0c;这时就用到时序数据库来存储和快速读取 我个人使用感觉国产的开源项目TDengine&#xff0c;比InfluxDB操作方便很多&#xff0c;容易上手&#xff0c;支持使用SqlSugar进行数据操作&#xff0c;跟操作mysql数据库一样的体…