2024王道408数据结构P144 T17

news2024/10/7 4:22:40

2024王道408数据结构P144 T17

思考过程

  1. 先看题目,让我们判断两棵二叉树是否相似,相似指的是以下三个方面:
    • T1和T2都是空的二叉树或T1和T2都只有一个结点
    • T1的左子树和T2的左子树是相似的,且T1的右子树和T2的右子树是相似的。

题目的意思我们可以简化为两个大类,要么为空要么为非空。请添加图片描述
2. 我们只要判断当前结点是两个都为空还是一个为空另一个不为空就行了,因为如果一个为空另一个不为空则说明这两棵树必不可能相似。如果两个结点都空的话我们函数结果return 1,把一个结点为空另一个结点不空的话函数返回return 0。

代码过程

  1. 正如我们上面所说的,我们需要判断三种情况
    • 如果两个结点都为空的话if(T1 == NULL && T2 == NULL)说明这两棵树必是相似的,我们直接return 1;就好了。
    • 如果两个结点中有一个结点为空if (T1 == NULL || T2 == NULL),另一个结点不为空的话说明这两棵树必不可能相似,我们返回0return 0;
    • 第三种情况就是两个结点都不为空,也就是我们需要用递归来判断剩下的结点是否相似,我们创建两个变量left和right,left用来表示两个结点的左子树是否相似,如果相似的话给我们返回1,不相似则返回0;right也一样,用来表示两个结点的右子树是否相似。假设我们给函数取名叫similarleft = similar(T1->lchild, T2->lchild); right = similar(T1->rchild, T2->rchild);最后返回的时候我们返回return (left && right);用逻辑与&&,左右两边都为1结果才是1,有0则0。

到这里这题就做完了。

完整代码

//
// Created by 黎圣  on 2023/8/26.
//
/*
 * 试设计判断两颗二叉树是否相似的算法。所谓二叉树T1和T2相似,指的是
 * T1和T2都是空的二叉树
 * 或都只有一个根结点
 * 或T1的左子树和T2的左子树是相似的,且T1的右子树和T2的右子树是相似的。
 */
#include "iostream"
using namespace std;
typedef struct TreeNode
{
    char data;
    struct TreeNode *lchild, *rchild;
}*tree;
void CreateTree(tree &t)
{
    char ch;
    cin >> ch;
    if (ch == '#')
        t = NULL;
    else
    {
        t = (struct TreeNode *)malloc(sizeof(struct TreeNode));
        t->data = ch;
        t->lchild = NULL;
        t->rchild = NULL;
        CreateTree(t->lchild);
        CreateTree(t->rchild);
    }
}
//递归比较左右子树 空+空 = 1 空+非空 = 0
int similar(tree T1, tree T2)
{
    int left, right;
    if (T1 == NULL && T2 == NULL)
        return 1;
    else if (T1 == NULL || T2 == NULL)
        return 0;
    else
    {
        left = similar(T1->lchild, T2->lchild);
        right = similar(T1->lchild, T2->rchild);
        return (left && right);
    }
}
int main()
{
    tree t1, t2;
    CreateTree(t1);
    CreateTree(t2);
    printf("%d", similar(t1, t2));
    return 0;
}

最后感谢b站up主@吸血小金鱼,找工作真难呜呜呜呜呜呜

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

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

相关文章

61.linux系统上c程序的编译与调试

目录 1.检查GCC是否已经安装:​编辑 2.使用包管理器来安装gcc: 3.c程序执行需要经过四个步骤 4.make和makefile 5.gdb调试 基础调试命令 一些示例 对于在Linux系统上编译和调试C程序,首先,需要确保已经安装了合适的编译器。在大多数…

均匀性校准积分球光源

随着LED半导体照明技术的发展和LED半导体照明产业的不断壮大,合理有效的LED 灯具或芯片的光度、色度检测方法是支撑半导体照明产业发展的重要技术基础,同时也 为积分球内部照明产品的提升提供了重要的技术保障。 在物理世界中,存在着各种各样…

elementui tree 层级过多时,高亮状态无法选满整行

问题: 如上图所示,官方的tree组件,在层级很多时 elementui -tree 的高亮状态并没有选中整行。 (衍生库 vue-easy-tree 也会出现此问题) 原因: (没有查看源码,只是根据dom简单定位…

“亚马逊云科技创业加速器”首期聚焦AI,促进入营企业业务发展

生成式AI技术飞速发展,颠覆着人们的生活,正在掀起新一轮的科技革命。在生成式AI的浪潮中,亚马逊云科技旨在为中国的优秀初创企业提供全方位支持,助其抢占先机。 在6月底举办的亚马逊云科技中国峰会上,亚马逊云科技联合…

SingleCellExperiment and SummarizedExperiment

这里的两个是不一样的 http://home.cc.umanitoba.ca/~psgendb/birchhomedir/R/x86_64-redhat-linux-gnu-library/3.4/SummarizedExperiment/html/SummarizedExperiment-class.html创建SummarizedExperiment nrows <- 200; ncols <- 6 counts <- matrix(runif(nrows …

什么是模块化编程?如何在JavaScript中实现模块化?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 模块化编程⭐ CommonJS 模块导出模块导入模块 ⭐ ES6 模块导出模块导入模块 ⭐ AMD 和 RequireJSAMD 模块 ⭐ UMD&#xff08;Universal Module Definition&#xff09;⭐ 小结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开…

万物流动 万物永驻 ——C++ Core Guidelines的流动哲学

众所周知&#xff0c;C 是一门自由的语言&#xff0c;语言的设计哲学之一就是赋予程序员极大的自由度和灵活性&#xff0c;因此&#xff0c;使用C 完成一个任务时&#xff0c;不同的程序员往往会有不同的实现方法&#xff0c;这真正阐释了什么叫条条大路通罗马。不过&#xff0…

【SaaS】你知道什么是SaaS吗?

文章目录 前言一、云服务架构的三个概念1.1 PaaS1.2 IaaS1.3 SaaS 二、SaaS系统的两大特征三、SaaS服务与传统服务、互联网服务的区别3.1 SaaS服务3.2 传统软件3.3 互联网应用供应商 四、B2B2C五、SaaS系统的分类5.1 业务型SaaS5.2 效率型SaaS5.3 混合型SaaS 六、如何SaaS化七、…

读SQL学习指南(第3版)笔记07_分组和子查询

1. 数据通常以数据库用户所需的最低层级的粒度存储 2. 分组 2.1. 隐式分组 2.1.1. mysql -&#xff1e; SELECT MAX(amount) max_amt,-&#xff1e; MIN(amount) min_amt,-&#xff1e; AVG(amount) avg_amt,-&#xff1e; SUM(amount) tot_amt,-&#xff1e; COUN…

电脑桌面备忘录怎么设置?如何在电脑上同步使用手机备忘录?

在工作中&#xff0c;上班族们需要经常记下一些重要的事项&#xff0c;如开会时间、工作进度、待办事项等等。这些信息对于他们来说至关重要&#xff0c;因为一旦遗忘或错过了这些事项&#xff0c;就可能造成不必要的麻烦和负面影响。因此&#xff0c;一款便捷的备忘录软件成为…

ssm+vue高校实验室管理系统源码和论文

ssmvue高校实验室管理系统源码和论文081 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 一&#xff0e;毕业设计的内容 本高校实验室管理系统采用Java语言、MySQL数据库&#xff0c;基于SSM框架进行开发设计&…

Fooocus:一个简单且功能强大的Stable Diffusion webUI

Stable Diffusion是一个强大的图像生成AI模型&#xff0c;但它通常需要大量调整和提示工程。Fooocus的目标是改变这种状况。 Fooocus的创始人Lvmin Zhang&#xff08;也是 ControlNet论文的作者&#xff09;将这个项目描述为对“Stable Diffusion”和“ Midjourney”设计的重新…

【MySQL】MySQL里的用户账户和角色是什么?如何管理?

用户&#xff08;user&#xff09;验证和授权创建用户账户连接服务器查看用户账户设置 角色&#xff08;role&#xff09;创建角色 操作用户帐户和角色重命名删除 感谢 &#x1f496; 用户&#xff08;user&#xff09; 在MySQL中&#xff0c;用户是数据库访问的主要实体。每个…

新亮点!安防视频监控/视频集中存储/云存储平台EasyCVR平台六分屏功能展示

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

Python爬虫(十六)_JSON模块与JsonPath

数据提取之JSON与JsonPATH JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;它是的人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景&#xff0c;比如网站前台与后台之间的数据交互。 JSON和XML的比较可谓不相…

基于单片机的智能小车设计

一、项目介绍 随着科技的发展&#xff0c;智能机器人在日常生活中的应用越来越广泛。智能小车作为智能机器人的一种&#xff0c;具有便携性和多功能的特点&#xff0c;在教育、娱乐和工业等领域得到了广泛关注和应用。智能小车可以通过远程控制实现各种动作&#xff0c;如前进…

Matlab图像处理-水平镜像

镜像变换 镜像变换又常称为对称变换&#xff0c;它可以分为水平对称、垂直对称等多种变换。对称变换后&#xff0c;图像的宽和高不变。 图像的镜像分为两种垂直镜像和水平镜像。 水平镜像即将图像左半部分和右半部分以图像竖直中轴线为中心轴进行对换&#xff1b; 竖直镜像…

精读《算法题 - 地下城游戏》

今天我们看一道 leetcode hard 难度题目&#xff1a;地下城游戏。 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士…

LeetCode--HOT100题(45)

目录 题目描述&#xff1a;199. 二叉树的右视图&#xff08;中等&#xff09;题目接口解题思路 PS: 题目描述&#xff1a;199. 二叉树的右视图&#xff08;中等&#xff09; 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序…

视频汇聚/视频云存储/视频监控管理平台EasyCVR视频平台添加萤火云设备的具体操作步骤

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…