双非二本找工作前的准备day21

学习目标:

每天复习代码随想录上的题目1-2道算法(时间充足可以继续)

今日碎碎念:

1)今天开始是二叉树系列

2)出租屋里不知道干啥,看看书啊刷刷算法,打打游戏,学学技术啥的,不让自己太闲着才行。

3)天天都是吃外卖,不出门了都,后续等到9号回来之后继续开始整理八股(以复习为主)。


力扣刷题

算法

力扣515:515. 在每个树行中找最大值

复制代码
class Solution {
    //结果集
    public List<List<Integer>> res = new ArrayList<List<Integer>>();

    public List<List<Integer>> levelOrder(TreeNode root) {
        dfs(root,0);
        return res;
    }
    //dfs方式
    public void dfs(TreeNode node,Integer deep){
        if(node == null) return;
        //记录深度
        deep++;
        //开始将遍历到的层加入大结果集
        if(res.size() < deep){
            //解读该if代码块:如果走到下一层了,我们就需要new一个新的List
            List<Integer> item = new ArrayList<>();
            //将新一层的小结果集放入大结果集
            res.add(item);
        }
        //开始dfs:通过deep找到对应层级的小结果集来存入遍历到的节点
        res.get(deep-1).add(node.val);

        dfs(node.left,deep);
        dfs(node.right,deep);
    }
}

力扣116:116. 填充每个节点的下一个右侧节点指针

1)解答思路:这道题需要我们特殊处理一下根节点,因为根节点是没有右边兄弟节点的

2)同理,每一层的最后一个节点也是一样没有右边兄弟节点的,想明白这两个点,然后再去bfs遍历

复制代码
/*
// Definition for a Node.
class Node {
    public int val;
    public Node left;
    public Node right;
    public Node next;

    public Node() {}
    
    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, Node _left, Node _right, Node _next) {
        val = _val;
        left = _left;
        right = _right;
        next = _next;
    }
};
*/

class Solution {
    public Node connect(Node root) {
        Deque<Node> que = new LinkedList<>();
        if(root != null) que.offer(root);
        //bfs
        while(!que.isEmpty()){
            //记录当前大小
            int size = que.size();
            //除了根节点没有兄弟节点以外,其余的都有,因此先对根节点特殊处理
            Node cur = que.poll();
            if(cur.left!=null) que.offer(cur.left);
            if(cur.right!=null) que.offer(cur.right);
            //然后去处理所有的子节点
            for(int i = 1;i<size;i++){
                Node tmp = que.poll();
                if(tmp.left!=null) que.offer(tmp.left);
                if(tmp.right!=null) que.offer(tmp.right);
                //记录上一个节点,然后指向右边
                cur.next = tmp;
                cur = tmp;
            }
        }
        return root;
    }
}

力扣104:104. 二叉树的最大深度

解答思路:

1)注意,这里并不需要对每个节点去找从该节点出发的最深,因为bfs的性质,只要队列中还有,还能往下,deep直接增加即可,如果是dfs,就会麻烦一点。

复制代码
class Solution {
    public int maxDepth(TreeNode root) {
        if(root == null) return 0;
        int deep = 0;
        Deque<TreeNode> que = new LinkedList<>();
        que.offer(root);
        while(!que.isEmpty()){
            int size = que.size();
            deep++;
            for(int i = 0;i < size;i++){
                //拿出当前节点
                TreeNode tmp = que.poll();
                //找孩子
                if(tmp.left!=null) que.offer(tmp.left);
                if(tmp.right!=null) que.offer(tmp.right);
            }
        }
        return deep;
    }
}

力扣111:111. 二叉树的最小深度

解答思路:

1)这道题思路同上,bfs直接做,当,当前节点的左右孩子为空,就可以返回答案了,如果存在孩子,还能继续往下走。

复制代码
class Solution {
    public int minDepth(TreeNode root) {
        if(root == null) return 0;
        int deep = 0;
        Deque<TreeNode> que = new LinkedList<>();
        que.offer(root);
        while(!que.isEmpty()){
            int size = que.size();
            //bfs性质,队列没空就可以继续
            deep++;
            for(int i = 0;i<size;i++){
                TreeNode tmp = que.poll();
                //当左右孩子都为空的时候才可以返回答案
                if(tmp.left==null && tmp.right==null) return deep;
                if(tmp.left!=null) que.offer(tmp.left);
                if(tmp.right!=null) que.offer(tmp.right);
            }
        }
        return deep;
    }
}
相关推荐
ZhengEnCi17 分钟前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是1 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考1 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
nm_zfyjt3 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
海的透彻4 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat4 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
后台模板学习5 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one5 小时前
算法--构造
java·数据结构·算法
SL_staff5 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
其实防守也摸鱼5 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php