题目难度:简单
LeetCode链接:226. 翻转二叉树 - 力扣(LeetCode) (leetcode-cn.com)
一、题目描述
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
二、解题思路
核心思路:
- 翻转二叉树其实就是交换「当前树」左右指针指向
如何翻转:
-
递归点:交换「当前树」左右指针的指向,左指针 left 指向右子树,右指针 right 指向左子树
-
不断往下递归,遍历完 root 的所有子树
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
// 翻转二叉树(自己写的子函数)
void _invertTree(struct TreeNode* root, struct TreeNode* leftSubTree, struct TreeNode* rightSubTree)
{
// 交换当前树左右指针的指向,left指向右子树,right指向左子树
root->left = rightSubTree;
root->right = leftSubTree;
// 继续往下递归遍历,分别翻转当前树的 左子树 和 右子树
if(leftSubTree) // 当前树的左子树根节点不为空时,才交换左子树的左右指针的指向
{
_invertTree(leftSubTree, leftSubTree->left, leftSubTree->right);
}
if(rightSubTree) // 当前树的右子树根节点不为空,才交换右子树的左右指针的指向
{
_invertTree(rightSubTree, rightSubTree->left, rightSubTree->right);
}
}
struct TreeNode* invertTree(struct TreeNode* root){
// 根节点root为空,说明不需要翻转,直接返回root
if(root == NULL)
{
return root;
}
// 根节点root不为空,但根节点root的左子树和右子树都为空,说明不需要翻转,直接返回root
if(root->left == NULL && root->right == NULL)
{
return root;
}
// 翻转二叉树
_invertTree(root, root->left, root->right);
// 返回根节点
return root;
}