题目:
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
思路:递归法
根据二叉树镜像的定义,考虑递归遍历(dfs)二叉树,交换每个节点的左 / 右子节点,即可生成二叉树的镜像。
解析:
- 终止条件: 当节点 rootrootroot 为空时(即越过叶节点),则返回 null 。
- 递推工作:
a. 开启递归 右子节点 invertTree(root.right) 。
b. 开启递归 左子节点 invertTree(root.left) 。
c. 交换 root 的 左右子节点. - 返回值: 返回当前节点 root 。
C++:
#include<iostream>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x)
{
val = x;
right = left = nullptr;
}
TreeNode(int x,TreeNode *left,TreeNode *right)
{
val = x;
right = right;
left = left;
}
};
// 递归:若左右子节点都已翻转,则调换左右节点位置即可!
class Solution
{
public:
TreeNode *rotateNode(TreeNode *root)
{
if (root == nullptr) return nullptr;
TreeNode* left = rotateNode(root->left);
TreeNode* right = rotateNode(root->right);
root->left = right;
root->right = left;
return root;
}
};
python:
思路同上:
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):
if not root: return
left = self.invertTree(root.left)
right = self.invertTree(root.right)
root.left = right
root.right = left
return root