用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 main

import (
    "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.Value
    Walk(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, <-c2
       fmt.Println(x, y)
       if x != y {
          return false
       }
    }
    return true
}
0; i++ {
       x, y := <-c1, <-c2
       fmt.Println(x, y)
       if x != y {
          return false
       }
    }
    return true
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

车联网架构设计(二)_消息缓存

在上一篇博客车联网架构设计(一)_消息平台的搭建-CSDN博客中&#xff0c;我介绍了车联网平台需要实现的一些功能&#xff0c;并介绍了如何用EMQXHAPROXY来搭建一个MQTT消息平台。车联网平台的应用需要消费车辆发布的消息&#xff0c;同时也会下发消息给车辆&#xff0c;以实现车…

ModStartCMS v7.7.0 集成内容区块,文件选择顺序

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

羊大师发现,广州可能真的要下雪了!

羊大师发现&#xff0c;广州可能真的要下雪了&#xff01; 关于这次广州可能要下雪的消息&#xff0c;来源于气象部门的初步预测。据气象部门表示&#xff0c;近期广州将受到较强的冷空气影响&#xff0c;降温幅度可达5-7摄氏度&#xff0c;且湿度较大&#xff0c;这都是下雪的…

动静态IP代理是怎么实现的?如何搭建稳定独享住宅IP?

首先&#xff0c;让我们来了解一下什么是动静态IP代理。动静态IP代理是一种网络代理服务&#xff0c;它可以通过设置IP代理服务器来隐藏用户的真实IP地址&#xff0c;从而保护用户的隐私和安全。 根据是否需要手动切换IP地址&#xff0c;可以将动静态IP代理分为动态代理和静态代…

C-11练习题

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 1,在C语言中,合法的长整型常数是(&#xff09; A. OxOL B. 4962710M C. 324562& D. 216D 2,设有定义: int a[10],*pa6,*q…

Git配置

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言 前面我们新建了远程仓库并且在Linux上克隆了远程仓库&#xff0c;但是在新建仓库时我们提到会配置gitignore文件&#xff0c;这次我们将会配置他&#xff0c;并给命令起别名。 目录 前言 忽略特殊文件 给命令起别名…

matplotlib 默认属性和绘图风格

matplotlib 默认属性 一、绘图风格1. 绘制叠加折线图2. Solarize_Light23. _classic_test_patch4. _mpl-gallery5. _mpl-gallery-nogrid6. bmh7. classic8. fivethirtyeight9. ggplot10. grayscale11. seaborn12. seaborn-bright13. seaborn-colorblind14. seaborn-dark15. sea…

东芝CT高压电源维修VP-33452 ULTIMAX80 DREX-ULT80

东芝高压电源多用于东芝CT机XVISION/EX、AUKLET系列、ASTEION系列、以及多排系列。 电源内部电路不得随意更改。电源维修的几点注意事项&#xff0c;希望大家能够在以后遇到类似的问题能帮帮助到大家。spellmαnl电源维修一首先在维修开关电源时&#xff0c;维修人员在修理时注…

Linux环境下安装Nginx

Nginx&#xff08;发音&#xff1a;engine-x&#xff09;是一个高性能的HTTP和反向代理服务器&#xff0c;也可以作为邮件代理服务器使用。它是由俄罗斯程序员Igor Sysoev开发的&#xff0c;并在2004年公开发布。Nginx是一个开源项目&#xff0c;可以在Linux、Unix、BSD和Windo…

UVM验证平台中加入sequencer

sequence机制用于产生激励&#xff0c;它是UVM中最重要的机制之一。在 一个规范化的UVM验证平台中&#xff0c;driver只负责驱动transaction&#xff0c;而不负责产生transaction。sequence机制有两大组成部分&#xff0c;一是 sequence&#xff0c;二是sequencer。如何在验证平…

集合01 - Java

集合 1、数组的不足2、集合3、集合的框架体系&#xff08;背&#xff09;CollectionMap 1、数组的不足 前面我们保存多个数据使用的是数组&#xff0c;那么数组有不足的地方&#xff0c;我们分析一下。 数组&#xff1a; 长度开始时必须指定,而且一旦指定&#xff0c;不能更改…

【从删库到跑路 | MySQL数据库总结篇】JDBC编程

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、前言…

Java多线程万字详解(基础概念、多线程实现方式、锁、消费者机制、线程池)

1 、基础概念解释 1.1线程与进程 线程&#xff1a;是操作系统能够进行运算调度的最小单位。它被包含在进程当中&#xff0c;是进程中的实际运作单位。 进程&#xff1a;是程序的基本执行实体。一个进程中至少有一个线程。一个进程中是可以有多个线程的。如QQ&#xff0c;微信那…

同旺科技 USB TO RS-485 定制款适配器--- 拆解(二)

内附链接 1、USB TO RS-485 定制款适配器 ● 支持USB 2.0/3.0接口&#xff0c;并兼容USB 1.1接口&#xff1b; ● 支持USB总线供电&#xff1b; ● 支持Windows系统驱动&#xff0c;包含WIN10 / WIN11系统32 / 64位&#xff1b; ● 支持Windows RT、Linux、Mac OS X、Windo…

android studio安装说明

一、安装文件下载&#xff1a; Android studio、SDK、NDK下载&#xff1a; https://developer.android.google.cn/ndk/downloads?hlzh-cn 二、双击android studio 安装文件&#xff0c;开始安装&#xff1a; 三、进入安装界面&#xff0c;点击“next”。 四、点击“next”&…

二手物品交易系统源码小程序H5闲置物品转让APP成品

这是一个二手物品交易系统的基本功能介绍&#xff0c;以下是对每个功能的详细解释&#xff1a; 商品发布&#xff1a;卖家可以通过系统发布二手商品信息&#xff0c;包括商品详情、价格、图片等。商品展示&#xff1a;系统会将所有发布的二手商品进行展示&#xff0c;买家可以…

微信小程序收款手续费怎么搞成0.2

今天&#xff0c;我将分享如何有效地降低日常中的收款手续费率。我们都知道&#xff0c;不管是微信支付还是支付宝&#xff0c;平台都会从中扣除一定的手续费。但你是否知道&#xff0c;其实手续费率是可以降低的呢&#xff1f;今天介绍如何申请最低手续费率为0.2%的方法&#…

虹科干货 | 关于JSON数据库

来源&#xff1a;艾特保IT 虹科干货 | 关于JSON数据库 原文链接&#xff1a;https://mp.weixin.qq.com/s/NutCGWa32rOcEHrk3UDGcQ 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 如何理解JSON数据库&#xff1f;作为NoSQL数据库的一种类型&#xff0c;JSON数据库有哪…

低压无功补偿在分布式光伏现场中的应用

摘要&#xff1a;分布式光伏电站由于建设时间短、技术成熟、收益明显而发展迅速&#xff0c;但光伏并网引起用户功率因数异常的问题也逐渐凸显。针对分布式光伏电站接入配电网后功率因数降低的问题&#xff0c;本文分析了低压无功补偿装置补偿失效的原因&#xff0c;并提出了一…

掌握终端,尽在ZOC for Mac – 最强大的终端仿真器!

在数字时代&#xff0c;终端仿真器是专业人士和开发者必备的工具之一。而ZOC for Mac将为您提供无与伦比的终端体验&#xff0c;助力您更轻松地管理远程连接、维护服务器和进行编程任务。 ZOC for Mac的卓越功能&#xff1a; 多协议支持&#xff1a;ZOC支持Telnet、SSH、SSH2、…