题目描述
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
图示
额外要求:
1、树中节点数目范围在 [0, 100] 内
2、-100 <= Node.val <= 100
思路分析
这道题需要使用到递归,要先确立子问题和停止条件
- 如果说每一个节点的子节点(包括最开始的根节点)都翻转,那么就可以达到整棵树都翻转过来
- 如果子节点是空节点,那么就不交换,直接停止递归
- 写代码的过程中,只以子问题为中心,完成了子问题再进行优化
样例代码
TreeNode* invertTree(TreeNode* root) {
//思路:根节点翻转他的两棵子树,然后两棵子树作为根节点,自己翻转自己的子树
//需要写一个递归,能让两个子树相互交换
if(root == nullptr)
{
return nullptr;
}
//已经成功交换的左子树和右子树
TreeNode* left = invertTree(root->left);
TreeNode* right = invertTree(root->right);
//让两个子树翻转
root->left = right;
root->right = left;
//题目要求返回根节点
return root;
}
总结
以上就是今天要讲的内容,本文简单介绍了翻转二叉树的解题思路,在力扣以及牛客网中还会有很多类似的题目,今后将会持续更新,敬请关注!