LC226 翻转二叉树![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/dae272d45667dff15cebea3907f41ebf.png)
1.读题
翻转一棵二叉树。
输入
输出
ps:本问题是受Max Howell的原问题启发的
大名鼎鼎的翻转二叉树hhh
2.思路
这是一道很经典的二叉树问题。
我们从根节点开始,递归地对树进行遍历,并从叶子结点先开始翻转。
如果当前遍历到的节点root_now的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以 root_now为根节点的整棵子树的翻转。
3.C++代码
依旧是经典的递归思想解决一切
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* invertTree(TreeNode* root_now) {
if (root_now == NULL) return root_now; //基准条件
swap(root_now->left, root_now->right); //翻转节点
invertTree(root_now->left);
invertTree(root_now->right);
return root_now;
}
};
4.python代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
if not root:
#基准条件
return root
left = self.invertTree(root.left)
right = self.invertTree(root.right)
root.left, root.right = right, left #交换
return root