38.交换二叉树中所有的左右节点

1.递归图解

一定要想着base case,也就是最基础的额情况,如右图,可以看到root->left =left = null,root->right = right = null,然后交换两个null的位置,返回中间这张图片,左下角的方框内就是刚刚做的操作也就是已经交换过了,当前处理的是中间图片的最上面的一个节点,left已经带回来了,处理完了,接下来处理 right = fun(root->right),又回到了右下角的basecase,同最右边的图片,递归着实很难理解,赛博鬼打墙了属于是,总结一句话,一定不要陷入细节中去,你的脑子是装不下那么多层的递归的,一定要从basecase出发,然后找到递归出口

2.代码

cpp 复制代码
class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root==NULL){
            return NULL ;
        }
       TreeNode* left = invertTree(root->left);
       TreeNode* right = invertTree(root->right);
        root->left = right;
        root->right = left;
        return root;
    }
};
相关推荐
2501_944521592 小时前
Flutter for OpenHarmony 微动漫App实战:主题配置实现
android·开发语言·前端·javascript·flutter·ecmascript
kk”2 小时前
C++智能指针
开发语言·c++
MX_93592 小时前
以配置非自定义bean来演示bean的实例化方式
java·开发语言·后端
2501_944521592 小时前
Flutter for OpenHarmony 微动漫App实战:动漫卡片组件实现
android·开发语言·javascript·flutter·ecmascript
lina_mua2 小时前
Cursor模型选择完全指南:为前端开发找到最佳AI助手
java·前端·人工智能·编辑器·visual studio
董世昌413 小时前
null和undefined的区别是什么?
java·前端·javascript
superman超哥3 小时前
派生宏(Derive Macro)的工作原理:编译时元编程的艺术
开发语言·rust·开发工具·编程语言·rust派生宏·derive macro·rust元编程
easyboot3 小时前
C#使用pythonnet简单示例
开发语言·python·c#
软弹3 小时前
Vue2 的数据响应式原理&&给实例新增响应式属性
前端·javascript·vue.js