力扣爆刷第90天之hot100五连刷36-40

力扣爆刷第90天之hot100五连刷36-40

文章目录

      • 力扣爆刷第90天之hot100五连刷36-40
      • [一、94. 二叉树的中序遍历](#一、94. 二叉树的中序遍历)
      • [二、104. 二叉树的最大深度](#二、104. 二叉树的最大深度)
      • [三、26. 翻转二叉树](#三、26. 翻转二叉树)
      • [四、101. 对称二叉树](#四、101. 对称二叉树)
      • [五、543. 二叉树的直径](#五、543. 二叉树的直径)

一、94. 二叉树的中序遍历

题目链接:https://leetcode.cn/problems/binary-tree-inorder-traversal/description/?envType=study-plan-v2\&envId=top-100-liked

思路:最简单的中序遍历,无需多说。

java 复制代码
class Solution {
    List<Integer> list = new ArrayList<>();
    public List<Integer> inorderTraversal(TreeNode root) {
        order(root);
        return list;
    }
    void order(TreeNode root) {
        if(root == null) {
            return ;
        }
        order(root.left);
        list.add(root.val);
        order(root.right);
    }
}

二、104. 二叉树的最大深度

题目链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/?envType=study-plan-v2\&envId=top-100-liked

思路:后续遍历到根节点,选取左右子树的结果中的最大值作为子树深度,然后加1即本节点,返回。

java 复制代码
class Solution {
    public int maxDepth(TreeNode root) {
        if(root == null) {
            return 0;
        }
        int left = maxDepth(root.left);
        int right = maxDepth(root.right);
        return Math.max(left, right) + 1;
    }
}

三、26. 翻转二叉树

题目链接:https://leetcode.cn/problems/invert-binary-tree/description/?envType=study-plan-v2\&envId=top-100-liked

思路:前序遍历,然后逐个交换节点左右子树即可。

java 复制代码
class Solution {
    public TreeNode invertTree(TreeNode root) {
        order(root);
        return root;
    }
    void order(TreeNode root) {
        if(root == null) return ;
        TreeNode t = root.left;
        root.left = root.right;
        root.right = t;
        order(root.left);
        order(root.right);
    }

}

四、101. 对称二叉树

题目链接:https://leetcode.cn/problems/symmetric-tree/description/?envType=study-plan-v2\&envId=top-100-liked

思路:判断是否是对称二叉树,直接把根节点的左右子树,作为一颗树进行遍历。

java 复制代码
class Solution {
    public boolean isSymmetric(TreeNode root) {
        return isEquels(root.left, root.right);
    }
    boolean isEquels(TreeNode child1, TreeNode child2) {
        if(child1 == null && child2 == null) return true;
        if((child1 == null && child2 != null) || (child1 != null && child2 == null)) return false;
        if(child1.val != child2.val) return false;
        return isEquels(child1.left, child2.right) && isEquels(child1.right, child2.left);
    }
}

五、543. 二叉树的直径

题目链接:https://leetcode.cn/problems/diameter-of-binary-tree/description/?envType=study-plan-v2\&envId=top-100-liked

思路:其实求的就是任意一个节点其左右子树能够连接的最长边长,那么问题就转化为求每个节点左子树的最长路径和右子树的最长路径和。

java 复制代码
class Solution {
  
    int max = 0;
    public int diameterOfBinaryTree(TreeNode root) {
       order(root);
       return max;
    }
    
    int order(TreeNode root) {
        if(root == null) return 0;
        int left = order(root.left);
        int right = order(root.right);
        max = Math.max(max, left + right);
        return Math.max(left, right) + 1;
    }

    
}
相关推荐
高洁017 分钟前
图神经网络初探(2)
人工智能·深度学习·算法·机器学习·transformer
爱装代码的小瓶子18 分钟前
算法【c++】二叉树搜索树转换成排序双向链表
c++·算法·链表
思成Codes21 分钟前
数据结构:基础线段树——线段树系列(提供模板)
数据结构·算法
a努力。1 小时前
字节Java面试被问:系统限流的实现方式
java·开发语言·后端·面试·职场和发展·golang
虾..2 小时前
Linux 简单日志程序
linux·运维·算法
Trent19852 小时前
影楼精修-眼镜祛反光算法详解
图像处理·人工智能·算法·计算机视觉·aigc
蓝色汪洋2 小时前
经典修路问题
开发语言·c++·算法
csuzhucong2 小时前
122魔方、123魔方
算法
Salt_07283 小时前
DAY 40 早停策略和模型权重的保存
人工智能·python·算法·机器学习
卜锦元3 小时前
Golang后端性能优化手册(第三章:代码层面性能优化)
开发语言·数据结构·后端·算法·性能优化·golang