数据结构--二叉树相关题2(OJ)

1.比较对称二叉树(镜像二叉树)

二叉树相关题1中第二题的变形题。先去看1哦!

左子树和右子树比较

复制代码
bool _isSymmetric(struct TreeNode* p, struct TreeNode* q)
{
	if (p == NULL && q == NULL)
		return true;
	//如果两个都为空则是相等的
	if (p == NULL || q == NULL)
		return false;//若一个为空,一个不为空
	if (p->val != q->val)//值不同
	{
		return false;

	}
	return isSameTree(p->left, q->right) && isSameTree(p->right, q->left);
}//反复递归
bool isSymmetric(struct TreeNode* root)
{
	return _isSymmetric(root->left, root->right);
}

2.二叉树的前序遍历

注意:返回的数组必须要开辟动态空间,并且,假定了访问的人会free,所以只用管mallooc就行了。

复制代码
//用前序遍历二叉树
//力扣规定如果返回数组,需要返回数组大小,就必须要知道这个数组的大小是多少(oj)
//先遍历一遍这个树,看是多少size
int TreeSize(struct TreeNode*root)
{
	return root == NULL ? 0 : TreeSize( root->left) + TreeSize(root->right) + 1;
}

//开辟空间
//returnSize输出型参数
// 传过去的是地址
// 下面解引用就可以改变里面的内容
// 就拿到了数组的大小是用来输出的


//形参//都用指针接受,这样可以进行更改
void   preOrder(struct TreeNode* root, int* a, int* pi)
{
	if (root == NULL)
		return;
	a[(*pi)++] = root->val;
	preOrder(root->left, a, pi);
	preOrder(root->right, a, pi);
}

int* preorderTraversal(struct TreeNode* root, int* returnSize)
{
	//解引用
	*returnSize = TreeSize(root);//得到root的大小
	int* a = (int*)malloc(sizeof(int) * (*returnSize));
	int i = 0;
	preOrder(root, a, &i);
	return a;//传的是数组
}
相关推荐
坚持编程的菜鸟6 小时前
模拟实现memmove
c语言·算法·模拟实现memmove
wabs6667 小时前
关于图论【最短路径之Dijkstra算法(堆优化版)|卡码网47.参加科学大会的思考】
数据结构·算法·图论·优先级队列·邻接表·小顶堆·卡码网
坚持编程的菜鸟7 小时前
编写判断大小端程序
c语言·算法·判断大小端
papaofdoudou7 小时前
判断排列逆序奇偶性的乘积判别法(范德蒙德符号法)
人工智能·算法
linux-hzh8 小时前
百日算法修炼 · Day 03
java·算法
问商十三载8 小时前
RAG 检索效果差怎么排查?2026 五层诊断法完整指南
开发语言·人工智能·windows·python·算法
嵌入式老牛9 小时前
三相电气量采集模块设计(三)非同步采样时的精度提升
算法·精度·计量
今天AI了吗10 小时前
精细化落地教程:TimechoAI调参标准+数据清洗规范+误差归因+阈值适配全维度指南
大数据·人工智能·算法
zephyr0511 小时前
从递归到迭代:二叉树非递归前中后序遍历详解
算法
Dr.kangder11 小时前
嵌入式总线设备解析——TTE总线应用与实践
开发语言·网络·算法·嵌入式·多任务·同步机制