day14-226.翻转二叉树+101. 对称二叉树+104.二叉树的最大深度

一、226.翻转二叉树

题目链接:https://leetcode.cn/problems/invert-binary-tree/

文章讲解:https://programmercarl.com/0226.翻转二叉树.html#算法公开课

视频讲解:https://www.bilibili.com/video/BV1fA4y1o715

1.1 初见思路

  1. 看到树的题目,就先考虑使用递归,递归写起来方便
  2. 递归的三要素

1.2 具体实现

java 复制代码
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root==null){
            return root;
        }
        //前序,中左右,中的操作是把中的左右节点互换
        reverse(root);
        invertTree(root.left);
        invertTree(root.right);
        return root;

    }
    void reverse(TreeNode node){
        TreeNode temp = new TreeNode();
        temp = node.left;
        node.left=node.right;
        node.right=temp;
        
    }
}

1.3 重难点

二、 101. 对称二叉树

题目链接:https://leetcode.cn/problems/symmetric-tree/submissions/540690035/

文章讲解:https://programmercarl.com/0101.对称二叉树.html#算法公开课

视频讲解:https://www.bilibili.com/video/BV1ue4y1Y7Mf

2.1 初见思路

  1. 判断节点的左子树跟右子树是否相同,

2.2 具体实现

java 复制代码
class Solution {
    public boolean isSymmetric(TreeNode root) {
        //使用后序遍历,判断左节点和右节点是否相同,将结果返回给中节点
        return compare(root.left, root.right);
    }
    private boolean compare(TreeNode left, TreeNode right) {

        if (left == null && right != null) {
            return false;
        }
        if (left != null && right == null) {
            return false;
        }

        if (left == null && right == null) {
            return true;
        }
        if (left.val != right.val) {
            return false;
        }
        // 比较外侧
        boolean compareOutside = compare(left.left, right.right);
        // 比较内侧
        boolean compareInside = compare(left.right, right.left);
        return compareOutside && compareInside;
    }
}

2.3 重难点

  • 思路转换成代码实现有难度,要考虑到左节点和右节点是否相等的各种场景

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

题目链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/

文章讲解:https://programmercarl.com/0104.二叉树的最大深度.html

视频讲解:https://www.bilibili.com/video/BV1Gd4y1V75u

3.1 初见思路

  1. 获取左子树的深度和右子树的深度,取较大者+1,为中节点的深度

3.2 具体实现

java 复制代码
class Solution {
    public int maxDepth = 0;
    public int maxDepth(TreeNode root) {
        if(root==null){
            return 0;
        }
        //采用后序遍历,左右中
        int leftD = maxDepth(root.left);
        int rightD = maxDepth(root.right);
        return Math.max(leftD,rightD)+1;
    }
}

3.3 重难点

四、 111.二叉树的最小深度

题目链接:https://leetcode.cn/problems/remove-element/

文章讲解:https://programmercarl.com/0111.二叉树的最小深度.html

视频讲解:https://www.bilibili.com/video/BV1QD4y1B7e2

4.1 初见思路

  1. 使用前序遍历:左右中

4.2 具体实现

java 复制代码
class Solution {
    public int minDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int leftDepth = minDepth(root.left);
        int rightDepth = minDepth(root.right);
        if (root.left == null) {
            return rightDepth + 1;
        }
        if (root.right == null) {
            return leftDepth + 1;
        }
        // 左右结点都不为null
        return Math.min(leftDepth, rightDepth) + 1;
    }
}

4.3 重难点

相关推荐
ZhengEnCi3 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
秋天的怀念_David4 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Pniubi4 小时前
力扣283移动零(双指针法)
算法·leetcode·职场和发展
hhb_6184 小时前
大模型落地三重优化实战
人工智能·算法·机器学习
云和数据.ChenGuang4 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
2601_970703836 小时前
工业除湿机租赁:把一份租金合同拆开看
大数据·数据结构·算法·数据库架构·推荐算法
心中有你02146 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
ZhengEnCi7 小时前
同样的模型,为什么本地和云 API 差别那么大:量化精度、聊天模板与采样参数的三大元凶
人工智能·算法·llm
Flynn Liang7 小时前
RAG 答非所问/幻觉怎么破?Spring AI QuestionAnswerAdvisor 召回优化实战(TopK/重排/混合检索)
人工智能·算法·spring·rag·幻觉·springai
liminla!8 小时前
SQL 从入门到进阶:语法速查与实战练习(完整优化版)
数据库·sql·算法