代码随想录二刷day15

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、力扣102. 二叉树的层序遍历
  • 二、力扣107. 二叉树的层序遍历 II
  • 三、力扣199. 二叉树的右视图
  • 四、力扣637. 二叉树的层平均值
  • 五、力扣429. N 叉树的层序遍历
  • 六、力扣515. 在每个树行中找最大值
  • 七、力扣116. 填充每个节点的下一个右侧节点指针
  • 八、力扣117. 填充每个节点的下一个右侧节点指针 II
  • 九、力扣104. 二叉树的最大深度
  • 十、力扣111. 二叉树的最小深度
  • 十一、力扣226. 翻转二叉树
  • 十二、力扣101. 对称二叉树


前言


一、力扣102. 二叉树的层序遍历

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();Deque<TreeNode> deq = new ArrayDeque<>();List<Integer> li = new ArrayList<>();if(root == null)return res;deq.offerLast(root);TreeNode pre = root;while(!deq.isEmpty()){TreeNode p = deq.pollFirst();li.add(p.val);if(p.left != null)deq.offerLast(p.left);if(p.right != null)deq.offerLast(p.right);if(pre == p){res.add(li);li = new ArrayList();pre = deq.peekLast();}}return res;}
}

二、力扣107. 二叉树的层序遍历 II

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> res = new ArrayList<>();Deque<TreeNode> deq = new ArrayDeque<>();if(root == null)return res;deq.offerLast(root);while(!deq.isEmpty()){int len = deq.size();List<Integer> li = new ArrayList<>();for(int i = 0; i < len; i ++){TreeNode p = deq.pollFirst();li.add(p.val);if(p.left != null)deq.offerLast(p.left);if(p.right != null)deq.offerLast(p.right);}res.add(li);}   List<List<Integer>> r = new ArrayList<>(); for(int i = res.size()-1; i >= 0; i--){r.add(res.get(i));}return r;}
}

三、力扣199. 二叉树的右视图

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<Integer> rightSideView(TreeNode root) {List<Integer> res = new ArrayList<>();Deque<TreeNode> deq = new ArrayDeque<>();if(root == null)return res;deq.offerLast(root);while(!deq.isEmpty()){int len = deq.size();for(int i = 0; i < len; i ++){TreeNode p = deq.pollFirst();if(i == len - 1){res.add(p.val);}if(p.left != null)deq.offerLast(p.left);if(p.right != null)deq.offerLast(p.right);}}return res;}
}

四、力扣637. 二叉树的层平均值

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<Double> averageOfLevels(TreeNode root) {List<Double> res = new ArrayList<>();Deque<TreeNode> deq = new ArrayDeque<>();deq.offerLast(root);while(!deq.isEmpty()){int len = deq.size();double count = 0;for(int i = 0; i < len; i ++){TreeNode p = deq.pollFirst();count += p.val;if(p.left != null)deq.offerLast(p.left);if(p.right != null)deq.offerLast(p.right);}res.add(count / len);}return res;}
}

五、力扣429. N 叉树的层序遍历

/*
// Definition for a Node.
class Node {public int val;public List<Node> children;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, List<Node> _children) {val = _val;children = _children;}
};
*/class Solution {public List<List<Integer>> levelOrder(Node root) {List<List<Integer>> res = new ArrayList<>();Deque<Node> deq = new ArrayDeque<>();if(root == null)return res;deq.offerLast(root);while(!deq.isEmpty()){int len = deq.size();List<Integer> l = new ArrayList<>();for(int i = 0; i < len; i ++){Node p = deq.pollFirst();l.add(p.val);List<Node> li = p.children;for(Node n : li){if(n != null)deq.offerLast(n);}}res.add(l);}return res;}
}

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

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<Integer> largestValues(TreeNode root) {List<Integer> res = new ArrayList<>();Deque<TreeNode> deq = new ArrayDeque<>();if(root == null)return res;deq.offerLast(root);while(!deq.isEmpty()){int len = deq.size();int max = Integer.MIN_VALUE;for(int i = 0; i < len; i ++){TreeNode p = deq.pollFirst();max = max > p.val ? max:p.val;if(p.left != null)deq.offerLast(p.left);if(p.right != null)deq.offerLast(p.right);}res.add(max);}return res;}
}

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

/*
// 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> deq = new ArrayDeque<>();if(root == null)return root;deq.offerLast(root);while(!deq.isEmpty()){int len = deq.size();for(int i = 0; i < len; i ++){Node p = deq.pollFirst();if(i != len-1){Node ne = deq.peekFirst();p.next = ne;}if(p.left != null)deq.offerLast(p.left);if(p.right != null)deq.offerLast(p.right);}}return root;}
}

八、力扣117. 填充每个节点的下一个右侧节点指针 II

/*
// 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> deq = new ArrayDeque<>();if(root == null)return root;deq.offerLast(root);while(!deq.isEmpty()){int len = deq.size();for(int i = 0; i < len; i ++){Node p = deq.pollFirst();if(i != len-1){Node ne = deq.peekFirst();p.next = ne;}if(p.left != null)deq.offerLast(p.left);if(p.right != null)deq.offerLast(p.right);}}return root;}
}

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

递归

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int maxDepth(TreeNode root) {if(root == null){return 0;}int l = maxDepth(root.left);int r = maxDepth(root.right);return l > r ? l + 1: r + 1;}
}

迭代

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int maxDepth(TreeNode root) {Deque<TreeNode> deq = new ArrayDeque<>();if(root == null)return 0;deq.offerLast(root);int high = 0;while(!deq.isEmpty()){int len = deq.size();for(int i = 0; i < len; i ++){TreeNode p = deq.pollFirst();if(p.left != null)deq.offerLast(p.left);if(p.right != null)deq.offerLast(p.right);}high ++;}return high;}
}

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

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int minDepth(TreeNode root) {Deque<TreeNode> deq = new ArrayDeque<>();if(root == null)return 0;deq.offerLast(root);int high = 0;while(!deq.isEmpty()){int len = deq.size();for(int i = 0; i < len; i ++){TreeNode p = deq.pollFirst();if(p.left == null && p.right == null){return high + 1;}if(p.left != null)deq.offerLast(p.left);if(p.right != null)deq.offerLast(p.right);}high ++;}return high;}
}

十一、力扣226. 翻转二叉树

迭代

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode invertTree(TreeNode root) {Deque<TreeNode> deq = new ArrayDeque<>();if(root == null)return root;deq.offerLast(root);while(!deq.isEmpty()){int len = deq.size();for(int i = 0; i < len; i ++){TreeNode p = deq.pollFirst();TreeNode temp = p.left;p.left = p.right;p.right = temp;if(p.left != null)deq.offerLast(p.left);if(p.right != null)deq.offerLast(p.right);}}return root;}
}

递归

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode invertTree(TreeNode root) {if(root == null)return null;TreeNode chirlLeft = invertTree(root.left);TreeNode chirlRight = invertTree(root.right);TreeNode temp = chirlLeft;root.left = chirlRight;root.right = temp;return root;}
}

十二、力扣101. 对称二叉树

递归

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSymmetric(TreeNode root) {Deque<TreeNode> deq = new ArrayDeque<>();if(root == null)return true;if(root.left == null && root.right == null)return true;if(root.left == null)return false;if(root.right == null)return false;if(root.left.val != root.right.val)return false;deq.offerLast(root.left);deq.offerLast(root.right);while(!deq.isEmpty()){int len = deq.size();if(len % 2 == 1)return false;TreeNode[] arr = new TreeNode[len];for(int i = 0; i < len; i ++){TreeNode p = deq.pollFirst();arr[i] = p;if(p.left != null)deq.offerLast(p.left);if(p.right != null)deq.offerLast(p.right);}for(int i = 0, j = len-1; i < j ; i ++, j --){if(arr[i].left == null && arr[j].right != null)return false;if(arr[i].left != null && arr[j].right == null)return false;if(arr[j].left == null && arr[i].right != null)return false;if(arr[j].left != null && arr[i].right == null)return false;if(arr[i].left != null && arr[j].right != null && arr[i].left.val != arr[j].right.val)return false;if(arr[j].left != null && arr[i].right != null && arr[j].left.val != arr[i].right.val)return false;}}return true;}
}

迭代版本二

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSymmetric(TreeNode root) {Deque<TreeNode> deq = new LinkedList<>();if(root == null)return true;deq.offerLast(root.left);deq.offerLast(root.right);while(!deq.isEmpty()){TreeNode childLeft = deq.pollFirst();TreeNode childRight = deq.pollFirst();if(childLeft == null && childRight == null)continue;if(childLeft != null && childRight == null)return false;if(childLeft == null && childRight != null)return false;if(childLeft != null && childRight != null && childLeft.val != childRight.val)return false;deq.offerLast(childLeft.left);deq.offerLast(childRight.right);deq.offerLast(childLeft.right);deq.offerLast(childRight.left);}return true;}
}

递归

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSymmetric(TreeNode root) {return compareTree(root.left, root.right);}public boolean compareTree(TreeNode childL, TreeNode childR){if(childL == null && childR != null)return false;if(childL != null && childR == null)return false;if(childL == null && childR == null)return true;if(childL.val != childR.val)return false;boolean boolL = compareTree(childL.left, childR.right);boolean boooR = compareTree(childL.right, childR.left);return boolL && boooR;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/72137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 第 361 场周赛

2843. 统计对称整数的数目 核心思想&#xff1a;枚举每一个数是否是对称整数,第一种写法为python写法&#xff0c;第二种为一般写法我觉得更好&#xff0c;非常有思想性。 2844. 生成特殊数字的最少操作 核心思想&#xff1a;枚举特殊数字结尾的几种可能。其实自己做的时候一…

2023/09/07 c++qt day2

#include <iostream>using namespace std; //封装一个学生类 struct stu { private://存放学生的成绩int stu_score[256];//记录学生个数int stu_num; public://用于设置学生个数void setNum(){cout<<"请输入学生的个数"<<" ";cin>&g…

Stable Diffuse 之 本地环境部署 WebUI 进行汉化操作

Stable Diffuse 之 本地环境部署 WebUI 进行汉化操作 目录 Stable Diffuse 之 本地环境部署 WebUI 进行汉化操作 一、简单介绍 二、汉化操作 附录&#xff1a; 一、Install from URL 中出现 Failed to connect to 127.0.0.1 port 7890: Connection refused 错误&#xf…

蓝桥杯练习题(3的倍数)

问题描述 小蓝对 3 的倍数很感兴趣。现在他手头有三个不同的数 a,b,c, 他想知道, 这三个数中是不是有两个数的和是 3 的倍数。 例如, 当 a3,b4,c6 时, 可以找到 a 和 c 的和是 3 的倍数。 例如, 当 a3,b4,c7 时, 没办法找到两个数的和是 3 的倍数。 输入格式 输入三行, 每行…

vscode ros配置

【ROS】VSCODE ROS 配置方法&#xff08;保姆级教程&#xff0c;总结了多篇&#xff09;_ros vscode_晴明大大的博客-CSDN博客

网络编程、多路复用和多路并发的区别、

在网络编程中&#xff0c;多路复用&#xff08;Multiplexing&#xff09;和多路并发&#xff08;Multithreading/Multiprocessing&#xff09;是两种不同的技术&#xff0c;用于处理多个客户端连接。它们有以下区别&#xff1a; 1.多路复用&#xff08;Multiplexing&#xff0…

【2023高教社杯数学建模国赛】ABCD题 问题分析、模型建立、参考文献及实现代码

【2023高教社杯数学建模国赛】ABCD题 问题分析、模型建立、参考文献及实现代码 1 比赛时间 北京时间&#xff1a;2023年9月7日 18:00-2023年9月10日20:00 2 思路内容 可以参考我提供的历史竞赛信息内容&#xff0c;最新更新我会发布在博客和知乎上&#xff0c;请关注我获得最…

重写与重载笔记

方法的重载(overload)&#xff1a;---------------------大大简化方法的调用 发生在同一类中&#xff0c;方法名相同&#xff0c;参数列表不同,方法的重载与返回值类型无关编译器在编译时会根据方法的签名自动绑定调用的方法 重写&#xff1a; 发生在父子类中&#xff0c;方法名…

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(9 月 6 日论文合集)

文章目录 一、分割|语义相关(19篇)1.1 DCP-Net: A Distributed Collaborative Perception Network for Remote Sensing Semantic Segmentation1.2 Self-Supervised Pre-Training Boosts Semantic Scene Segmentation on LiDAR data1.3 DeNISE: Deep Networks for Improved Segm…

C++核心编程--类篇

C核心编程 1.内存分区模型 C程序在执行时&#xff0c;将内存大方向分为4个区域 意义&#xff1a;不同区域存放数据&#xff0c;赋予不同的生命周期&#xff0c;更能灵活编程 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的全局区&#xff1a;存放…

Vue3+Element Plus实现el-table跨行显示(非脚手架)

Vue3Element Plus实现el-table跨行显示 app组件内容使用:span-method"objectSpanMethod"自定义方法实现跨行显示查询方法初始化挂载新建一个html即可进行测试&#xff0c;完整代码如下效果图 app组件内容 <div id"app"><!-- 远程搜索 --><e…

算法训练day43|动态规划 part05:0-1背包 (LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474.一和零)

文章目录 1049. 最后一块石头的重量 II思路分析代码实现 494. 目标和思路分析动规方法代码实现总结思考 474.一和零思路分析代码实现思考总结 var code "57a5e730-4e5e-43ad-b567-720d69f0371a"1049. 最后一块石头的重量 II 题目链接&#x1f525;&#x1f525; 有…

揭秘拼多多API接口:让商家和用户实现高效连接与便捷操作

随着电商行业的飞速发展&#xff0c;拼多多作为一家新兴电商平台&#xff0c;近年来已逐渐成为市场的焦点。为了满足商家和用户的需求&#xff0c;拼多多不断创新&#xff0c;推出了智能化的API接口&#xff0c;以实现更加高效、便捷的操作和管理。本文将深入探讨拼多多API接口…

提高使用VS Code工作效率的技巧

提高使用VS Code工作效率的技巧 时间轴视图&#xff1a;本地源代码控制 时间轴视图为我们提供了内置的源代码控制。 我们中的许多人都知道 Git 和其他源代码控制工具有多么有用&#xff0c;它们可以帮助我们轻松跟踪文件更改并在需要时恢复到之前的状态。 因此&#xff0c;…

MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)

目录 概述 概念 MySQL启动与停止 客户端连接 关系型数据库&#xff08;RDBMS&#xff09; SQL 数据类型 DDL DML DQL DCL 函数 字符串函数 数值函数 日期函数 流程函数 约束 多表查询 多表关系 笛卡尔积 内连接 外连接 自连接 联合查询 子查询 事…

LeetCode 面试题 03.05. 栈排序

文章目录 一、题目二、C# 题解 一、题目 栈排序。 编写程序&#xff0c;对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据&#xff0c;但不得将元素复制到别的数据结构&#xff08;如数组&#xff09;中。该栈支持如下操作&#xff1a;push、pop、peek 和…

go基础08-map的内部实现

和切片相比&#xff0c;map类型的内部实现要复杂得多。Go运行时使用一张哈希表来实现抽象的map类型。运行时实现了map操作的所有功能&#xff0c;包括查找、插入、删除、遍历等。在编译阶段&#xff0c;Go编译器会将语法层面的map操作重写成运行时对应的函数调用。 下面是大致的…

YOLOV7改进-添加Deformable Conv V2

可变形卷积link class DCNv2(nn.Module):def __init__(self, in_channels, out_channels, kernel_size, stride1,padding1, groups1, actTrue, dilation1, deformable_groups1):super(DCNv2, self).__init__()self.in_channels in_channelsself.out_channels out_channelsse…

QT for andriod

QT for andriod 开发 apk软件&#xff0c;因为一些特殊的原因&#xff0c;在这里简单的记录一哈自己开发apk的流程和心得。 首先说明我采用的环境有哪些&#xff1f; 1、QT的版本&#xff0c;个人建议5.15.2的版本及以上&#xff0c;我是用的5.15.2。 2、andriod studio 可以…

3D数据导出工具HOOPS Publish:3D数据查看、生成标准PDF或HTML文档!

HOOPS中文网http://techsoft3d.evget.com/ 一、3D导出SDK HOOPS Publish是一款功能强大的SDK&#xff0c;可以创作丰富的工程数据并将模型文件导出为各种行业标准格式&#xff0c;包括PDF、STEP、JT和3MF。HOOPS Publish核心的3D数据模型是经过ISO认证的PRC格式(ISO 14739-1:…