数据结构判断两棵树是否相等

embedded/2024/12/4 4:19:34/

算法思想

判断两棵二叉树是否相等,主要有以下几个步骤:

  1. 递归比较:如果两棵树的根节点的数据相等,则继续递归地比较左右子树。
  2. 递归终止条件
    • 如果两棵树都为空,则认为它们相等。
    • 如果一棵树为空,另一棵树不为空,则认为它们不相等。
    • 如果根节点的数据不同,则认为它们不相等。
  3. 递归推进:如果根节点数据相同,继续比较左子树和右子树

程序设计

#include <stdio.h>
#include <stdlib.h>// 定义二叉树节点结构体
typedef int TElemType;  // 假设数据类型为int,可根据需要修改
typedef struct BiTNode {TElemType data;struct BiTNode* lchild, * rchild;
} BiTNode, * BiTree;// 判断两棵二叉树是否相等的递归函数
int areTreesEqual(BiTree tree1, BiTree tree2) {// 如果两棵树都为空,认为相等if (tree1 == NULL && tree2 == NULL) {return 1;}// 如果一棵树为空,另一棵树不为空,则不相等if (tree1 == NULL || tree2 == NULL) {return 0;}// 如果根节点的数据不相等,则不相等if (tree1->data != tree2->data) {return 0;}// 递归判断左子树和右子树是否相等return areTreesEqual(tree1->lchild, tree2->lchild) && areTreesEqual(tree1->rchild, tree2->rchild);
}// 创建一个新节点的函数
BiTree createNode(TElemType data) {BiTree newNode = (BiTree)malloc(sizeof(BiTNode));if (newNode) {newNode->data = data;newNode->lchild = newNode->rchild = NULL;}return newNode;
}// 主函数测试
int main() {// 创建两棵相同的树BiTree tree1 = createNode(1);tree1->lchild = createNode(2);tree1->rchild = createNode(3);BiTree tree2 = createNode(1);tree2->lchild = createNode(2);tree2->rchild = createNode(3);// 判断两棵树是否相等if (areTreesEqual(tree1, tree2)) {printf("The trees are equal.\n");}else {printf("The trees are not equal.\n");}return 0;
}


http://www.ppmy.cn/embedded/142796.html

相关文章

【NLP】第四章:门控循环单元GRU

四、门控循环单元GRU 建议看本篇时&#xff0c;一定一定要把前面的LSTM先看看&#xff1a;【NLP】第三章&#xff1a;长短期记忆网络LSTM-CSDN博客 ,当你对LSTM的各个方面的细节都清晰了&#xff0c;GRU就是闭眼就会的&#xff0c;就是秒懂的&#xff0c;而且以后你再听到什么…

.net core 创建linux服务,并实现服务的自我更新

目录 创建服务创建另一个服务&#xff0c;用于执行更新操作给你的用户配置一些systemctl命令权限 创建服务 /etc/systemd/system下新建服务配置文件&#xff1a;yourapp.service&#xff0c;内容如下&#xff1a; [Unit] Descriptionyourapp Afternetwork.target[Service] Ty…

架构03-事务处理

零、文章目录 架构03-事务处理 1、本地事务实现原子性和持久性 &#xff08;1&#xff09;事务类型 **本地事务&#xff1a;**单个服务、单个数据源**全局事务&#xff1a;**单个服务、多个数据源**共享事务&#xff1a;**多个服务、单个数据源**分布式事务&#xff1a;**多…

C语言第十四周课——课堂练习

目录 1.冒泡法排序&#xff08;降序排列&#xff09; 2.控制台输出100以内的素数 3. 计算1-100的和 1.冒泡法排序&#xff08;降序排列&#xff09; 要求使用for循环&#xff0c;并且写死数据 写死数据&#xff1a;不从控制台输入&#xff0c;在排序前定义好需要排序的数据 …

【算法刷题指南】优先级队列

&#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系列 &#x1f308;Linux学习专栏&#xff1a; 南桥谈Linux &#x1f308;数据结构学习专栏&#xff1a; 数据结构杂谈 &#x1f308;数据…

【linux】(21)进程端口排查-fuser

fuser 是一个用于显示进程使用的文件、套接字或端口的 Linux 命令。它可以帮助诊断某个文件、目录、端口或设备被哪个进程占用。 基本语法 fuser [选项] 文件或端口常用选项 选项说明-a显示所有指定文件或端口的进程信息。-k杀死占用指定文件或端口的进程。-i在杀死进程前询问…

在线家具商城基于 SpringBoot:设计模式与实现方法探究

第3章 系统分析 用户的需求以及与本系统相似的在市场上存在的其它系统可以作为系统分析中参考的资料&#xff0c;分析人员可以根据这些信息确定出本系统具备的功能&#xff0c;分析出本系统具备的性能等内容。 3.1可行性分析 尽管系统是根据用户的要求进行制作&#xff0c;但是…

LearnOpenGL学习(光照 -- 投光物,多光源)

完整代码见&#xff1a;zaizai77/Cherno-OpenGL: OpenGL 小白学习之路 投光物 将光投射(Cast)到物体的光源叫做投光物(Light Caster) 平行光 当我们使用一个假设光源处于无限远处的模型时&#xff0c;它就被称为定向光&#xff0c;因为它的所有光线都有着相同的方向&#x…