day5 翻转二叉树

不懂一点数据结构。

读题

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
据图示,应该是完全对称的左右翻转。
有节点定义:

1
2
3
4
5
6
7
8
9
// 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) {}
};

思路

考虑使用递归;先左后右。

1
2
3
4
5
6
7
void fun(root){
if root==nullptr return;
do fun(root->left);
do fun(root->right);
switch(root->left, root->right);
return;
}

写成 cpp 就是:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
void fun(TreeNode* root){
if(root==nullptr) return;
fun(root->left);
fun(root->right);
TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
return;
}
TreeNode* invertTree(TreeNode* root) {
if(root==nullptr) return root;
fun(root);
return root;

}
};

结果

一次通过,执行时间 0 ms(啊?),消耗内存 12.17 MB。
就像题解评论说的,”幸福来得太突然”,我自己还没反应过来,就过了。

收获

递归确实非常擅长处理树和链表这种单向的逻辑的数据结构。


day5 翻转二叉树
http://blog.wspdwzh.space/2025/10/22/day5-翻转二叉树/
作者
peter?
发布于
2025年10月22日
许可协议