代码随想录算法训练营day15|226.翻转二叉树、101.对称二叉树

层序遍历
看完本篇可以一口气刷十道题,试一试, 层序遍历并不难,大家可以很快刷了十道题。

题目链接/文章讲解/视频讲解:代码随想录

226.翻转二叉树 (优先掌握递归)

这道题目 一些做过的同学 理解的也不够深入,建议大家先看我的视频讲解,无论做过没做过,都会有很大收获。

题目链接/文章讲解/视频讲解:代码随想录

101. 对称二叉树 (优先掌握递归)

先看视频讲解,会更容易一些。

题目链接/文章讲解/视频讲解:代码随想录

cpp 复制代码
TreeNode* invertTree(TreeNode* root) {
	if (root == NULL) return root;
	swap(root->left, root->right);
	invertTree(root->left);
	invertTree(root->right);
	return root;
}

前序遍历节点并交换左右孩子

前序遍历和后序遍历都可以进行翻转二叉树,因为可以保证左右子树的原始顺序。如果是中序遍历的话,左->中(交换了左右子树)->右处理右子树时实际上是处理左子树,违背了我们的初衷

所以中序遍历不可以翻转二叉树

但是你说非要用"中序遍历"来写,也不是不可以

cpp 复制代码
 TreeNode* invertTree(TreeNode* root) {
        if (root == NULL) return root;
        invertTree(root->left); // 左
        swap(root->left, root->right);// 中
        invertTree(root->left); // 注意 这里依然要遍历左孩子,因为中间节点已经翻转了
        return root;
    }
cpp 复制代码
bool compare(TreeNode* left, TreeNode* right) {
	if (left == NULL && right != NULL) return false;
	else if (left != NULL && right == NULL) return false;
	else if (left == NULL && right == NULL) return true;
	else if (left->val != right->val) return false;

	bool outside = compare(left->left, right->right);
	bool inside = compare(left->right, right->left);
	bool isSame = outside && inside;
	return isSame;
}
bool isSymmetric(TreeNode* root) {
	if (root == NULL) return true;
	return compare(root->left, root->right);
}

递归三部曲:

1.确定递归函数的参数和返回值

2.确定终止条件base condition

3.确定单层递归的逻辑

写递归不要关注子问题的过程,很容易晕,要想子问题的结果,写好边界条件和非边界条件,剩下的交给计算机。

相关推荐
知花实央l21 分钟前
【算法与数据结构】拓扑排序实战(栈+邻接表+环判断,附可运行代码)
数据结构·算法
吃着火锅x唱着歌39 分钟前
LeetCode 410.分割数组的最大值
数据结构·算法·leetcode
AI科技星3 小时前
垂直原理:宇宙的沉默法则与万物运动的终极源头
android·服务器·数据结构·数据库·人工智能
QuantumLeap丶4 小时前
《数据结构:从0到1》-05-数组
数据结构·数学
violet-lz4 小时前
数据结构八大排序:希尔排序-原理解析+C语言实现+优化+面试题
数据结构·算法·排序算法
草莓工作室5 小时前
数据结构9:队列
c语言·数据结构·队列
violet-lz5 小时前
数据结构八大排序:堆排序-从二叉树到堆排序实现
数据结构·算法
爱学习的小鱼gogo6 小时前
python 单词搜索(回溯-矩阵-字符串-中等)含源码(二十)
开发语言·数据结构·python·矩阵·字符串·回溯·递归栈
浮灯Foden6 小时前
算法-每日一题(DAY18)多数元素
开发语言·数据结构·c++·算法·leetcode·面试
violet-lz6 小时前
数据结构八大排序:归并排序-原理+C语言实现+优化+面试题
c语言·数据结构·排序算法