双非二本找工作前的准备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;
    }
}
相关推荐
NAGNIP1 小时前
一文搞懂机器学习中的特征降维!
算法·面试
NAGNIP1 小时前
一文搞懂机器学习中的特征构造!
算法·面试
毕设源码-郭学长1 小时前
【开题答辩全过程】以 基于SpringBoot技术的美妆销售系统为例,包含答辩的问题和答案
java·spring boot·后端
梨落秋霜1 小时前
Python入门篇【文件处理】
android·java·python
Java 码农2 小时前
RabbitMQ集群部署方案及配置指南03
java·python·rabbitmq
Learn Beyond Limits2 小时前
解构语义:从词向量到神经分类|Decoding Semantics: Word Vectors and Neural Classification
人工智能·算法·机器学习·ai·分类·数据挖掘·nlp
哈库纳玛塔塔2 小时前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor
你怎么知道我是队长2 小时前
C语言---typedef
c语言·c++·算法
S***q3772 小时前
Spring Boot管理用户数据
java·spring boot·后端
天“码”行空3 小时前
java面向对象的三大特性之一多态
java·开发语言·jvm