代码随想录算法训练营day14 | 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

226.翻转二叉树
先序后序均可,不能中序,会导致一颗子树被反复翻转

点击查看代码
class Solution {
public:
    void Travesal(TreeNode *root) {
        if(root == nullptr) return;
        swap(root->left, root->right);
        invertTree(root->left);
        invertTree(root->right);
    }
    TreeNode* invertTree(TreeNode* root) {
        Travesal(root);
        return root;
    }
};

101.对称二叉树
本题有一种错误解法,就是左中右遍历二叉树得序列1,再右中左遍历二叉树得序列2,这种方法在树节点值均不相同时ok,但在以下测试用例下不ok:

本题有点别扭,先跳过...

104.二叉树的最大深度
解法一:层序遍历,见day13

解法二:前序遍历,设置全局变量depth,并在参数列表中设置当前深度curDepth,通过前序遍历自上往下传,并更新depth值

点击查看代码
class Solution {
public:
    int depth = 0;
    void findMaxD(TreeNode* root, int curDepth) {
        if(root == nullptr) return;
        depth = max(depth, curDepth);
        findMaxD(root->left, curDepth + 1); //下一层,深度要加1
        findMaxD(root->right, curDepth + 1); //下一层,深度要加1
    }
    int maxDepth(TreeNode* root) {
        findMaxD(root, 1); //通过该调用去更新全局遍历depth
        return depth;
    }
};

解法三:后序遍历,通过后序遍历,自下往上求每个节点的高度并返回给父节点,逐层往上传递,最终得到根节点的高度,即整棵树的深度

点击查看代码
class Solution {
public:
    int maxDepth(TreeNode* root) {
        if(root == nullptr) return 0; //空节点高度为0
        int Lheight = maxDepth(root->left); //求左子树的高度
        int Rheight = maxDepth(root->right); //求左子树的高度
        return max(Lheight, Rheight) + 1; //中间节点的高度 = max(左子树的高度, 右子树的高度) + 1
    }
};

111.二叉树的最小深度
解法一:层序遍历,见day13,该解法好理解,建议着重掌握该解法

解法二:后序遍历,对每个节点求最小深度时,要分3种情况讨论

点击查看代码
class Solution {
public:
    int minDepth(TreeNode* root) {
        if(root == nullptr) return 0;
        int Ldepth = minDepth(root->left);
        int Rdepth = minDepth(root->right);
        if(root->left == nullptr && root->right != nullptr) return Rdepth + 1; //第一种情况
        if(root->right == nullptr && root->left != nullptr) return Ldepth + 1; //第二种情况
        return min(Ldepth, Rdepth) + 1; //第三种情况(其中合并了左右均不空和左右均为空的情况)
    }
};

2025/02/26

posted @   coder小杰  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示