相同的二叉树

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

输入:p = [1,2,3], q = [1,2,3]
输出:true

示例 2:

输入:p = [1,2], q = [1,null,2]
输出:false

示例 3:

输入:p = [1,2,1], q = [1,1,2]
输出:false

解题思路:

先判断两棵树当前节点是否都为空,是则返回true;若只有一棵为空则返回false。接着对比当前节点值,不等则返回false。若当前节点都存在且值相等,就递归比较它们的左子树和右子树,左右子树都相同才返回true,有一边不同就返回false。先处理输入为空的边界情况,返回空树。然后从输入首元素创建根节点并入队列,按层序遍历顺序,依输入内容为节点构建左、右子树(非 “#” 表示有节点,创建并关联后入队列),最终返回根节点。

具体代码:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

// 定义二叉树节点类
class TreeNode1 {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode1(int val) {
        this.val = val;
        this.left = null;
        this.right = null;
    }
}

class Solution3 {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        // 如果两棵树当前节点都为空,说明同步遍历到了叶子节点的下一层,认为相同
        if (p == null && q == null) {
            return true;
        }
        // 如果其中一棵为空,另一棵不为空,结构不同,返回False
        if (p == null || q == null) {
            return false;
        }
        // 如果当前节点的值不相等,返回False
        if (p.val!= q.val) {
            return false;
        }
        // 递归比较左子树和右子树是否相同
        return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
    }
}

public class  xiangTongDeShu{
    public static TreeNode buildTree(String[] input) {
        if (input == null || input.length == 0) {
            return null;
        }
        // 使用队列辅助构建二叉树
        LinkedList<TreeNode> queue = new LinkedList<>();
        TreeNode root = new TreeNode(Integer.parseInt(input[0]));
        queue.add(root);
        int index = 1;
        while (!queue.isEmpty() && index < input.length) {
            TreeNode current = queue.poll();
            // 构建左子树
            if (!input[index].equals("#")) {
                TreeNode left = new TreeNode(Integer.parseInt(input[index]));
                current.left = left;
                queue.add(left);
            }
            index++;
            // 构建右子树
            if (index < input.length &&!input[index].equals("#")) {
                TreeNode right = new TreeNode(Integer.parseInt(input[index]));
                current.right = right;
                queue.add(right);
            }
            index++;
        }
        return root;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请按照层序遍历顺序输入第一棵二叉树节点值(用空格隔开,空节点用#表示):");
        String inputStr1 = scanner.nextLine();
        String[] inputArray1 = inputStr1.split(" ");
        TreeNode tree1 = buildTree(inputArray1);

        System.out.println("请按照层序遍历顺序输入第二棵二叉树节点值(用空格隔开,空节点用#表示):");
        String inputStr2 = scanner.nextLine();
        String[] inputArray2 = inputStr2.split(" ");
        TreeNode tree2 = buildTree(inputArray2);

        Solution3 solution3 = new Solution3();
        boolean result = solution3.isSameTree(tree1, tree2);
        System.out.println("两棵树是否相同:" + result);

        scanner.close();
    }
}

运行截图:

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

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

相关文章

百度地图JSAPI WebGL v1.0类参考

百度地图JSAPI WebGL v1.0类参考 核心类 Map 此类是地图API的核心类&#xff0c;用来实例化一个地图。请注意WebGL版本的地图API的命名空间是BMapGL。 示例&#xff1a;const map new BMapGL.Map(container); 构造函数描述Map(container: String | HTMLElement, opts: Map…

【k8s】监控metrics-server

metrics-server介绍 Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一个应用部署在集群中。Metric server从每个节点上KubeletAPI收集指标&#xff0c;通过Kubernetes聚合器注册在Master APIServer中。为集群提供Node、Pods资源利用率指标。 就像Linux 系统一样…

AI 声音:数字音频、语音识别、TTS 简介与使用示例

在现代 AI 技术的推动下&#xff0c;声音处理领域取得了巨大进展。从语音识别&#xff08;ASR&#xff09;到文本转语音&#xff08;TTS&#xff09;&#xff0c;再到个性化声音克隆&#xff0c;这些技术已经深入到我们的日常生活中&#xff1a;语音助手、自动字幕生成、语音导…

ARM CCA机密计算安全模型之硬件强制安全

安全之安全(security)博客目录导读 [要求 R0004] Arm 强烈建议所有 CCA 实现都使用硬件强制的安全(CCA HES)。本文件其余部分假设系统启用了 CCA HES。 CCA HES 是一个可信子系统的租户——一个 CCA HES 主机(Host),见下图所示。它将以下监控安全域服务从应用处理元件(P…

matlab显示sin二维图

1&#xff0c;新建脚本 2、保存脚本 3、脚本命令&#xff1a;clc 清除 脚本命令的信息 clrear all 清除全部 4工作区内容&#xff1a;变量啥的 x0:0.001:2*pi%% 开始 精度 中值 ysin(x) y1cos(x) figure%%产生一个屏幕 plot(x,y)%%打印坐标 title(ysin(x))%%标题 xlabel(…

一万台服务器用saltstack还是ansible?

一万台服务器用saltstack还是ansible? 选择使用 SaltStack 还是 Ansible 来管理一万台服务器&#xff0c;取决于几个关键因素&#xff0c;如性能、扩展性、易用性、配置管理需求和团队的熟悉度。以下是两者的对比分析&#xff0c;帮助你做出决策&#xff1a; SaltStack&…

Flutter 1.2:flutter配置gradle环境

1、在android的模块中进行gradle环境配置 ①在 gradle-wrapper.properties文件中将url配置为阿里云镜像&#xff0c;因为gradle的服务器在国外&#xff0c;国内下载非常慢&#xff0c;也可在官网进行下载 gradle版本下载 gradle版本匹配 阿里云镜像gradle下载 可以通过复制链…

vue 2 父组件根据注册事件,控制相关按钮显隐

目标效果 我不注册事件&#xff0c;那么就不显示相关的按钮 注册了事件&#xff0c;才会显示相关内容 实现思路 组件在 mounted 的时候可以拿到父组件注册监听的方法 拿到这个就可以做事情了 mounted() {console.log(this.$listeners, this.$listeners);this.show.search !…

Vue+Elementui el-tree树只能选择子节点并且支持检索

效果&#xff1a; 只能选择子节点 添加配置添加检索代码 源码&#xff1a; <template><div><el-button size"small" type"primary" clearable :disabled"disabled" click"showSign">危险点评估</el-button>…

PhPMyadmin-漏洞复现

前情条件是&#xff1a;首先将我们的PHP版本设置在5.5以上 注&#xff1a;禁止用于未授权的测试! 首先搭建环境&#xff0c;登录后台 点击》》SQL 查看当前的日志状态 SHOW VARIABLES LIKE general%;因为之前我原来做过所以general_log 是开启的&#xff0c;如果vlau 是OF…

【2024】使用Docker搭建redis sentinel哨兵模式集群全流程(包含部署、测试、错误点指正以及直接部署)

目录&#x1f4bb; 前言**Docker Compose介绍**最终实现效果 一、搭建集群1、创建文件结构2、创建redis节点3、验证节点4、创建sentinel哨兵5、验证Sentinel功能 二、spring连接1、添加依赖2、添加配置3、启动测试 三、直接部署流程1、拉取配置2、修改端口创建 前言 本篇文章主…

泷羽sec-shell编程(完结) 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

眼部按摩仪WT2605音频蓝牙语音芯片方案 单芯片实现语音提示及控制/手机无线音频传输功能

随着科技的快速发展&#xff0c;人们的生活方式也在不断改变&#xff0c;智能化、便捷化的产品逐渐成为市场的主流。眼部按摩仪作为一种结合了现代科技与健康生活理念的产品&#xff0c;受到了广大消费者的青睐。而在众多眼部按摩仪中&#xff0c;采用WT2605音频蓝牙芯片的方案…

相交链表和环形链表

&#xff08;一&#xff09;相交链表 相交链表 思路&#xff1a;先分别计算出A列表和B列表的长度&#xff0c;判断它们的尾节点是否相等&#xff0c;如果不相等就不相交&#xff0c;直接返回空。然后让两个列表中的长的列表先走它们的差距步&#xff0c;然后再一起走&#xff…

知识竞赛活动中现场用到的对讲机有哪些

在知识竞赛活动中&#xff0c;现场工作人员间一般通过对讲机进行联系和调动&#xff0c;那么&#xff0c;知识竞赛活动现场常用的对讲机品牌和型号有哪些呢&#xff0c;主要包括宝锋BF-888S、威贝特WBT-V1Plus、摩托罗拉V168、泉盛UV-K6和海能达S1等。这些对讲机各具特色&#…

reverse_re3

一、使用Exeinfo PE查壳 64无壳 二、使用IDA静态分析 1.找main&#xff0c;没有找到。按ShifeF12字符串查找&#xff0c;发现flag{md5(your input)}:md5加密&#xff0c;所以要找输入值。 2.点击后&#xff0c;发现所在函数sub_940 3.进入函数&#xff0c;使用R键将数字转换…

图论入门教程:GTM173 Graph Theory

这是本图论的入门教材&#xff0c;Graph Theory Fifth Edition&#xff0c;隶属于著名的GTM系列&#xff0c;作者是Reinhard Diestel。这是本对新人友好的教材&#xff0c;之前本科上离散数学的课时&#xff0c;因为涉及到图论&#xff0c;而学校的课堂又太水让我心生不满&…

c++ A*搜索算法

算法原理 A*算法通过以下公式计算节点的优先级&#xff1a; f(n)g(n)h(n)f(n)&#xff1a;节点 n的总优先级&#xff0c;表示从起点通过节点 n 到目标点的估计代价。g(n)&#xff1a;从起点到节点 n 的实际代价。h(n)&#xff1a;从节点 n到目标点的启发式估计代价。 A*的核…

修理一个433Mhz遥控器无法遥控和接触不良的故障

修了一个遥控器&#xff0c;故障表现为其中一个硅胶按键接触不良&#xff0c;使劲按压&#xff0c;却是时而可以时而无法遥控。另外一个为完全无法遥控。 按键部分图示如下 用频谱看&#xff0c;能发射的遥控器发出430Mhz的信号&#xff0c;虽然有接触不良&#xff0c;但是可以…

RabbitMQ 客户端工程环境配置

RabbitMQ 客户端工程环境配置 下面分别以 C# 控制台应用程序 、 Unity 工程为例 一 C# 控制台应用程序 &#xff08;1&#xff09;新建项目 (2) RabbitMQ 需要通过 NuGet 安装 打开项目解决方案 -> 依赖项(右键) -> 管理 NuGet 程序包 -> 搜索 RabbitMQ.Client -&…