目录
法一、
法二、
题述:
翻转一颗二叉树。
输入:

输出:

题中已给:
struct TreeNode
{
	int val;
	struct TreeNode* left;
	struct TreeNode* right;
};
TreeNode* invertTree(struct TreeNode* root) 
法一、
思路:
类似于后序遍历:左右根。根节点无需交换,交换左右子树就好,不断递归,交换当前树的左右节点,再交换左右子树的左右节点......直到遇到空树,返回。
①、2和7交换
②、然后访问4的左子树(以7为根的树),然后交换1和3,再访问3的左子树(以1为根的树),为NULL返回NULL,同理,3的右子树返回NULL,然后return root,即3,然后访问7的右子树1,同理3的访问,最后会返回root 1,至此7的左右子树访问完毕并完成交换,然后访问4的右子树2,同理,会会先交换6和9,然后不断递归,最后直到2的左右子树访问完毕会返回2,4的左右子树也访问完毕,返回根节点4,完成所有子树交换。
invertTree函数的功能:比如invertTree(root->left)就会完成以root->left为根节点的左右节点的交换
struct TreeNode* invertTree(struct TreeNode* root)
{
    //如果是空树,直接返回NULL,无需交换
	if (root == NULL)
	{
		return NULL;
	}
    //交换左右节点
	struct TreeNode* tmp = root->left;
	root->left = root->right;
	root->right = tmp;
    //递归左右子树
	invertTree(root->left);
	invertTree(root->right);
	return root;
} 
法二、
思路:
递归过程:
以4为根节点的左右子树,保存右子树7,7=invertTree(root->left),即下次调用传入根节点2,右子树=invertTree(2的左子树即以1为根的子树),1的左右子树均为NULL后,return 1,即2的右子树变为1,同理左子树会变为3。至此4的左子树访问完毕,同理4的右子树也是一样的访问过程,最后4的左右子树都访问完毕,会返回4,整棵树翻转完毕。
struct TreeNode* invertTree(struct TreeNode* root)
{
	if (root == NULL)
	{
		return NULL;
	}
	struct TreeNode* right = root->right;
	root->right = invertTree(root->left);
	root->left = invertTree(right);
	return root;
} 


![vector [] 赋值出现的报错问题](https://img-blog.csdnimg.cn/19c86224848a4a52b81af53e18617c0f.png)









![[LeetCode周赛复盘] 第 353 场周赛20230709](https://img-blog.csdnimg.cn/aa84a4b3c2f8492b81f2a7358e3c55a2.png)







