立志重刷代码随想录60天冲冲冲!!——第十四天

226.翻转二叉树

前、后序遍历。就增加了交换位置

交换每个孩子节点的位置

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == nullptr) return root;
        // 前序、后序可以。中序的话:左中左或右中右
        swap(root->left, root->right);
        invertTree(root->left);
        invertTree(root->right);
        return root;
    }
};

101. 对称二叉树

外侧对比,内侧对比

class Solution {
public:
    // 收集孩子的信息,向上一级返回,需要后序(左右中)
    bool compare(TreeNode* left, TreeNode* right) {
        if (left == nullptr && right != nullptr) return false;
        else if (left != nullptr && right == nullptr) return false;
        else if (left == nullptr && right == nullptr) return true;
        else if (left->val != right->val) return false;

        bool outside = compare(left->left, right->right);
        bool inside = compare(left->right, right->left);
        return outside && inside;
    }

    bool isSymmetric(TreeNode* root) {
        bool res = compare(root->left, root->right);
        return res;
    }
};

104.二叉树的最大深度

后序(左右中)计算最大高度。

1、确定返回值和参数(int和node)

2、终止条件

3、后序排列,逻辑是左右孩子最大值再➕1

class Solution {
public:
    int GetMaxHeight(TreeNode* node) {
        if (node == nullptr) return 0;
        int LeftHeight = GetMaxHeight(node->left);
        int RightHeight = GetMaxHeight(node->right);
        int Height = max(LeftHeight, RightHeight) + 1;
        return Height;
    }

    int maxDepth(TreeNode* root) {
        int height = GetMaxHeight(root);
        return height;
    }
};

111.二叉树的最小深度

处理逻辑非常重要!!

后序遍历(左右中)

左空右有,右➕1

左有右空,左➕1

左右都有,最小值➕1

class Solution {
public:
    int GetMinHeight(TreeNode* node) {
        if (node == nullptr) return 0;

        int leftheight = GetMinHeight(node->left);
        int rightheight = GetMinHeight(node->right);
        // 需要注意的地方!!!此处逻辑非常重要
        if (node->left == nullptr && node->right != nullptr) {
            return rightheight + 1;
        } else if (node->left != nullptr && node->right == nullptr) {
            return leftheight + 1;
        } else {
            int height = min(leftheight, rightheight) + 1;
            return height;
        }
    }
    
    int minDepth(TreeNode* root) {
        int height = GetMinHeight(root);
        return height;
    }
};

代码随想录更新 文章被收录于专栏

冲冲冲冲冲冲!

全部评论

相关推荐

10-23 16:33
门头沟学院 Java
本人某中9本科,成绩中等,目前没科研没实习,目前后端学到了javaWeb,开始没定好方向,在学国外课程,走工程路线起步有点晚了,到这个时间点了还在学JavaWeb,顿感迷茫,不知道是坚持走下去还是寒假去准备考研。考研这个路弄得我还是心痒痒的,因为从众考研的人也不在少数,所以会有这方面的心理安慰吧,就是“不行我可以去考研啊”,而且意味着三年的缓冲,为了复试还有积攒经验美化简历,其实现在也可以去申入实验室打杂;就业可能意味着多些工作经验,工程岗应该到后面还是经验大于学历?还是有点迷茫了,求助好心人有无路线启发
千千倩倩:同27给点建议,现在这个时间点可以快速看完外卖和点评,不用跟着敲,但一定要在看的时候总结每个部分的整个业务流程,对其中的实现有一个大概的印象。然后直接开始看八股,刷算法。八股和算法最好还是在项目学习中穿插着看。如果计算机基础,算法这些基础好,加上每天刻苦学习,两周可以达到勉强能面试的水平,到时候就直接海投中小厂,在约面和面试的过程中不断巩固知识。没找到实习也没关系,就当积累经验。再沉淀一波直接明年三月开始投暑期,毕竟是9本,总是有面试机会的,只要你这三个月不懈怠,面试发挥得一定不错,只要拿到一个中,大厂暑期实习,秋招就有竞争力了。总得而言,现在还有机会,但是时间非常紧张,需要你结合自己情况考虑,共勉
你会选择考研还是直接就业
点赞 评论 收藏
分享
10-19 14:15
兰州大学 Java
黄花菜豆:咱俩bg很一致啊uu而且我也做过这个仿小红书,感觉有点太深了短期内不好驾驭啊怕被问穿
点赞 评论 收藏
分享
09-28 22:01
已编辑
广西科技大学 IT技术支持
合适才能收到offe...:找桌面运维?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务