首页 > 其他分享 >day14

day14

时间:2023-01-29 00:33:05浏览次数:40  
标签:int day14 que new null root size

1、层序遍历

  1. 102.二叉树的层序遍历

    class Solution {
        public List<List<Integer>> levelOrder(TreeNode root) {
            List<List<Integer>> resList = new ArrayList<List<Integer>>();
            Queue<TreeNode> que = new LinkedList<TreeNode>();
    
            if(root != null){
                que.add(root);
            }
    
            while(!que.isEmpty()){
                int size = que.size();
                List<Integer> list = new ArrayList<Integer>();
    
                for(int i=0; i<size; i++){
                    TreeNode node = que.poll();
                    list.add(node.val);
                    if(node.left != null){
                        que.offer(node.left);
                    }
                    if(node.right != null){
                        que.offer(node.right);
                    }
                }
                resList.add(list);
            }
    
            return resList;
    
        }
    }
    
  2. 107.二叉树的层次遍历II

    class Solution {
        public List<List<Integer>> levelOrderBottom(TreeNode root) {
            List<List<Integer>> resList = new ArrayList<List<Integer>>();
            Queue<TreeNode> que = new LinkedList<TreeNode>();
    
            if(root != null){
                que.add(root);
            }
    
            while(!que.isEmpty()){
                int size = que.size();
                List<Integer> list = new ArrayList<Integer>();
    
                for(int i=0; i<size; i++){
                    TreeNode node = que.poll();
                    list.add(node.val);
                    if(node.left != null){
                        que.offer(node.left);
                    }
                    if(node.right != null){
                        que.offer(node.right);
                    }
                }
                resList.add(list);
            }
    		
    		//将上一题的结果翻转一下就行了
            List<List<Integer>> result = new ArrayList<>();
            for (int i = resList.size() - 1; i >= 0; i-- ) {
                result.add(resList.get(i));
            }
    
            return result;
    
        }
    }
    
  3. 199.二叉树的右视图

    class Solution {
        public List<Integer> rightSideView(TreeNode root) {
            List<Integer> res = new ArrayList<Integer>();
            Queue<TreeNode> que = new LinkedList<TreeNode>();
    
            if(root != null){
                que.offer(root);
            }  
    
            while(!que.isEmpty()){
                int size = que.size();
                for (int i = 0; i < size; i++) {
                    TreeNode node = que.poll();
                    if(i==size-1){// 将每一层的最后元素放入result数组中
                        res.add(node.val);
                    }
                    if(node.left != null){
                        que.offer(node.left);
                    }
                    if(node.right != null){
                        que.offer(node.right);
                    }
                }
            }
    
            return res;
    
        }
    }
    
  4. 637.二叉树的层平均值

    class Solution {
        public List<Double> averageOfLevels(TreeNode root) {
            Queue<TreeNode> que = new LinkedList<TreeNode>();
            List<Double> list = new ArrayList<Double>();
    
            if(root != null){
                que.offer(root);
            }  
    
            while(!que.isEmpty()){
                int size = que.size();
                double sum = 0.0;
    
                for(int i=0; i<size; i++){
                    TreeNode node = que.poll();
                    sum += node.val;
                    if(node.left != null){
                        que.offer(node.left);
                    }
                    if(node.right != null){
                        que.offer(node.right);
                    }
                }
                list.add(sum/size);
            }
            return list;
        }
    }
    
  5. 429.N叉树的层序遍历

    class Solution {
        public List<List<Integer>> levelOrder(Node root) {
            List<List<Integer>> resList = new ArrayList<List<Integer>>();
            Queue<Node> que = new LinkedList<Node>();
    
            if(root != null){
                que.offer(root);
            }
    
            while(!que.isEmpty()){
                int size = que.size();
                List<Integer> list = new ArrayList<Integer>();
    
                for(int i=0; i<size; i++){
                    Node node = que.poll();
                    list.add(node.val);
                    for(int j=0; j<node.children.size(); j++){// 将节点孩子加入队列
                        if(node.children.get(j) != null){
                            que.offer(node.children.get(j));
                        }
                    }
                }
                resList.add(list);
            }
    
            return resList;
            
        }
    }
    
  6. 515.在每个树行中找最大值

    class Solution {
        public List<Integer> largestValues(TreeNode root) {
            Queue<TreeNode> que = new LinkedList<TreeNode>();
            List<Integer> list = new ArrayList<Integer>();
    
            if(root != null){
                que.offer(root);
            }  
    
            while(!que.isEmpty()){
                int size = que.size();
                int max = Integer.MIN_VALUE;
    
                for(int i=0; i<size; i++){
                    TreeNode node = que.poll();
                    max = Math.max(node.val,max);
                    if(node.left != null){
                        que.offer(node.left);
                    }
                    if(node.right != null){
                        que.offer(node.right);
                    }
                }
                list.add(max);
            }
            return list;
    
        }
    }
    
  7. 116.填充每个节点的下一个右侧节点指针

  8. 117.填充每个节点的下一个右侧节点指针II

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

    class Solution {
        public int maxDepth(TreeNode root) {
            Queue<TreeNode> que = new LinkedList<TreeNode>();
            int depth = 0;
    
            if(root != null){
                que.offer(root);
            }
    
            while(!que.isEmpty()){
                int size = que.size();
                depth++;
    
                for(int i=0; i<size; i++){
                    TreeNode node = que.poll();
                    if(node.left != null){
                        que.offer(node.left);
                    }
                    if(node.right != null){
                        que.offer(node.right);
                    }
                }
            }
            return depth;
        }
    }
    
  10. 111.二叉树的最小深度

    class Solution {
        public int minDepth(TreeNode root) {
            Queue<TreeNode> que = new LinkedList<TreeNode>();
            int depth = 0;
    
            if(root != null){
                que.offer(root);
            }
    
            while(!que.isEmpty()){
                int size = que.size();
                depth++;
    
                for(int i=0; i<size; i++){
                    TreeNode node = que.poll();
                    if(node.right==null && node.left==null){
                        return depth;
                    }
                    if(node.left != null){
                        que.offer(node.left);
                    }
                    if(node.right != null){
                        que.offer(node.right);
                    }
                }
            }
            return depth;
        }
    }
    

2、leetcode226 翻转二叉树(优先掌握递归)

  1. 思路

    226.翻转二叉树1

    只要把每一个节点的左右孩子翻转一下,就可以达到整体翻转的效果

    使用前序遍历和后序遍历都可以,唯独中序遍历不方便,因为中序遍历会把某些节点的左右孩子翻转了两次!

    那么层序遍历可以不可以呢?依然可以的!只要把每一个节点的左右孩子翻转一下的遍历方式都是可以的!

  2. 代码实现

    class Solution {
        public TreeNode invertTree(TreeNode root) {
            if(root==null){
                return null;
            }
    
            swapChildren(root); // 中
            invertTree(root.left); //左
            invertTree(root.right); //右
            return root;
        }
    
        private void swapChildren(TreeNode root) {
            TreeNode tmp = root.left;
            root.left = root.right;
            root.right = tmp;
        }
    }
    

3、leetcode101 对称二叉树 (优先掌握递归)

  1. 若左右子树可以相互翻转,则该二叉树则为对称二叉树,采用后序遍历,因为要将左右孩子节点的情况反馈给上一层父节点。

  2. 代码实现

    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;
            }else if (left != null && right == null) {
                return false;
            }else if (left == null && right == null) {
                return true;
            }else if (left.val != right.val) {
                return false;
            }
            boolean compareOutside = compare(left.left, right.right);
            boolean compareInside = compare(left.right, right.left);
            return compareOutside && compareInside;
        }
    }
    

标签:int,day14,que,new,null,root,size
From: https://www.cnblogs.com/hzj-bolg/p/17071578.html

相关文章

  • Day14 - 网络编程
    1.IP地址IP地址的概念IP地址就是标识网络中设备的一个地址,好比现实生活中的家庭地址。网络中的设备效果图:IP地址的表现形式说明:IP地址分为两类:IPv4......
  • day14-常用API
    1.API1.1API概述【理解】什么是API​ API(ApplicationProgrammingInterface):应用程序编程接口java中的API​ 指的就是JDK中提供的各种功能的Java类,这些类......
  • 代码随想录day14 LeetCode 144.二叉树的前序遍历 145.二叉树的后序遍历 94.二叉树的中
    144.二叉树的前序遍历classSolution{public:vector<int>v;vector<int>preorderTraversal(TreeNode*root){if(root==NULL)returnv;......
  • day14-功能实现13
    家居网购项目实现013以下皆为部分代码,详见https://github.com/liyuelian/furniture_mall.git32.功能30-会员不能登录后台管理32.1需求分析/图解管理员admin登录后,......
  • day14
    ##方法![image-20221231214246351](C:\Users\biao\AppData\Roaming\Typora\typora-user-images\image-20221231214246351.png)![image-20221231221749988](C:\Users\bia......
  • javascript-代码随想录训练营day14
    递归的三要素:递归函数的参数和返回值单层递归的逻辑终止条件144.二叉树的先序遍历题目链接:https://leetcode.cn/problems/binary-tree-preorder-traversal/题目描......
  • 代码随想录算法训练营Day14|144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉
    代码随想录算法训练营Day14|144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历144.二叉树的前序遍历144.二叉树的前序遍历递归遍历/***Defini......
  • Day14.3:数组的三种初始化理解
    数组的三种初始化静态初始化即数组的声明和赋值一起完成int[]arrays={1,2,3,4,5};动态初始化-——手动赋值(包含默认初始化)声明数组的但不赋以确切的值,没有赋值......
  • Day14.2:数组的声明及创建
    数组概念相同类型的数据的集合。语法格式://数组类型数组名=数组的值;int[]a=newint[10];//数组a含10个int类型的数据//====================================......
  • Day14.1:递归
    递归理解:当A方法调用A方法,也就是方法自身调用自身。案例:定义阶乘的方法,并求出5!。publicclassDemo{publicstaticvoidmain(String[]args){System.out......