数据结构--二叉树相关题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;//传的是数组
}
相关推荐
青少儿编程课堂27 分钟前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
jktantan1 小时前
注解式脱敏:用 Jackson 的 ContextualSerializer 做字段级策略(一)
spring boot·后端·算法·spring cloud·系统架构
Dream it possible!14 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊15 小时前
算法之双指针系列(一)
算法·leetcode
十二15 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
小此方16 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划
Pniubi16 小时前
力扣560.和为k的子数组
算法·leetcode·职场和发展
D e re k ZH17 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
Pniubi17 小时前
力扣438.找到字符串中所有字母异位词
算法·leetcode·职场和发展
東隅已逝,桑榆非晚20 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法