当前位置: 首页 > article >正文

数据结构 ——— 链式二叉树oj题:相同的树

目录

题目要求

手搓两个链式二叉树

代码实现 


题目要求

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

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


手搓两个链式二叉树

代码演示:

// 数据类型
typedef int BTDataType;

// 二叉树节点的结构
typedef struct BinaryTreeNode
{
	BTDataType data; //每个节点的数据

	struct BinaryTreeNode* left; //指向左子树的指针

	struct BinaryTreeNode* right; //指向右子树的指针
}BTNode;

// 申请新节点
BTNode* BuyNode(BTDataType x)
{
	BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));

	// 判断是否申请成功
	if (newnode == NULL)
	{
		perror("malloc fail");
		return NULL;
	}

	// 初始化
	newnode->data = x;
	newnode->left = NULL;
	newnode->right = NULL;

	return newnode;
}

// 树1
BTNode* CreatBinaryTree1()
{
	BTNode* n1 = BuyNode(1);
	assert(n1);
	BTNode* n2 = BuyNode(2);
	assert(n2);
	BTNode* n3 = BuyNode(3);
	assert(n3);
	BTNode* n4 = BuyNode(4);
	assert(n4);
	BTNode* n5 = BuyNode(5);
	assert(n5);
	BTNode* n6 = BuyNode(6);
	assert(n6);
	
	n1->left = n2;
	n1->right = n4;
	n2->left = n3;
	n4->left = n5;
	n4->right = n6;

	return n1;
}

// 树2
BTNode* CreatBinaryTree2()
{
	BTNode* n1 = BuyNode(1);
	assert(n1);
	BTNode* n2 = BuyNode(2);
	assert(n2);
	BTNode* n3 = BuyNode(3);
	assert(n3);
	BTNode* n4 = BuyNode(4);
	assert(n4);
	BTNode* n5 = BuyNode(5);
	assert(n5);
	BTNode* n6 = BuyNode(6);
	assert(n6);
	
	n1->left = n2;
	n1->right = n4;
	n2->left = n3;
	n4->left = n5;
	n4->right = n6;

	return n1;
}

代码实现

代码演示: 

bool isSameTree(BTNode* p, BTNode* q)
{
	if (p == NULL && q == NULL)
		return true;

	if (p == NULL || q == NULL)
		return false;

	if (p->data != q->data)
		return false;

	return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}

代码解析:

第一个 if 语句用于判断是否同时为空
因为第一个 if 语句判断了是否为空的情况,所以第二个 if 语句只要执行了,那么必定有一个节点不为空,所以就不相等,返回 false
而第三个 if 语句就是用于判断两个树相对应的节点数据是否相同,不同就返回 false
以上三个 if 语句都是相辅相成的,且先后顺序不能改变
最后再利用前序遍历的思想,走完两颗树对应的位置判断是否相等

代码验证:


http://www.kler.cn/a/382548.html

相关文章:

  • 【昇腾】从单机单卡到单机多卡训练
  • C++入门基础知识134—【关于C 库函数 - gmtime()】
  • spark-on-k8s 介绍
  • Centos开机自启动脚本示例
  • 如何处理vue项目中的错误
  • 内网项目,maven本地仓库离线打包,解决Cannot access central in offline mode?
  • Spring Boot 中的拦截器 (HandlerInterceptor) 使用方案
  • 基于Halcon的支持向量机(SVM)技术的特征分类
  • B2119 删除单词后缀
  • 全文检索ElasticSearch到底是什么?
  • 计算机网络易混淆知识点串记
  • 【JAVA基础】HashMap详细
  • Node.js NPM以及REPL(交互式解释器) 使用介绍(基础介绍 二)
  • 编写虚拟的GPIO控制器的驱动程序:和pinctrl的交互使用
  • “高效开发之路:用Spring MVC构建健壮的企业级应用”
  • springboot系列十三: 异常处理
  • Redis数据库测试和缓存穿透、雪崩、击穿
  • 应急救援无人车:用科技守护安全!
  • Webserver(4.4)多进程/多线程实现并发服务器
  • JMeter快速造数之数据导入导出
  • [CKS] K8S Admission Set Up
  • 群控系统服务端开发模式-应用开发-本地上传工厂及阿里云上传工厂开发
  • wps 运行宏 获取所有的表格
  • Flutter鸿蒙next 中的 setState 使用场景与最佳实践
  • 【Ag-Grid】 使用笔记 Vue3 + Vite(一)
  • Docker安装及简单使用