![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构+LeetCode
奋斗的校长
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 32 - I. 从上到下打印二叉树(中等
题目 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 解法 class Solution { public int[] levelOrder(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); //暂存树中的节点 ArrayList<Integer> list = new ArrayList<>(); //报错输出的节点原创 2021-10-17 16:56:25 · 132 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II(简单)
题目 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 解法 此题和二叉树的层次遍历类似 不过要设置一个变量记住每层的节点个数 class Solution { public List<List<Integer>> levelOrder(TreeNode root) { //设置一个队列,用来存储二叉树中的元素 Queue<TreeNode> queue = new LinkedList<原创 2021-10-17 12:45:05 · 143 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度(简单)
标题题目解法: 题目 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 解法: class Solution { public int maxDepth(TreeNode root) { if(root == null){ return 0; } int l = maxDepth(root.left); int r = maxD原创 2021-10-14 17:54:32 · 78 阅读 · 0 评论 -
LeetCode110. 判断一个树是否为平衡二叉树(简单)
目录题目解法:递归套路 题目 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 解法:递归套路 平衡树成立条件: 左树为平衡二叉树 右树为平衡二叉树 左树和右树的高度差小于1 需要信息: 左树:是否是平衡二叉树、高度 右树:是否是平衡二叉树、高度 class Solution { //返回值类型 public class ReturnType{ public boolean i原创 2021-10-12 17:55:14 · 110 阅读 · 0 评论 -
LeetCode958. 二叉树的完全性检验(中等)
题目 给定一个二叉树,确定它是否是一个完全二叉树。 百度百科中对完全二叉树的定义如下: 若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。) 解法 思路: 层次遍历二叉树,遇到第一个左右不全空的节点,则做上标记 如果存在节点左孩子为空,右孩子不为空,则返回false 代码(l == null && r != null) 再2不违规情况下,第原创 2021-10-11 17:01:51 · 70 阅读 · 0 评论 -
LeetCode 98. 验证二叉搜索树
题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 方法一:辅助列表,判定中序遍历是否满足递增 class Solution { //如果中序遍历的结果是满足递增的说明是搜索二叉树 List<Integer> res = new ArrayList<>(); public boo原创 2021-10-11 15:31:13 · 55 阅读 · 0 评论 -
2.2剑指 Offer 30. 包含min函数的栈
2.2.1题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返原创 2021-10-08 17:53:38 · 39 阅读 · 0 评论 -
2.1剑指 Offer 09. 用两个栈实现队列(简单)
2.1.1题目 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]] 输出:[null,null,3,-1] 示例 2: 输入: [“CQueue”,“deleteHead”,“appe原创 2021-10-08 16:27:35 · 45 阅读 · 0 评论 -
1.4剑指 Offer 52. 两个链表的第一个公共节点
牛客:JZ36 两个链表的第一个公共结点 1.4.1题目 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表原创 2021-09-30 14:14:21 · 50 阅读 · 0 评论 -
LeetCode 剑指 Offer 24. 反转链表
牛客:JZ15 反转链表 1.2.1题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 1.2.2解法一:双指针 第一层循环 第二层循环 class Solution { public ListNode reverseList(ListNode head) { ListNode pre =原创 2021-09-29 17:33:00 · 73 阅读 · 0 评论 -
LeetCode 剑指 Offer 06. 从尾到头打印链表
牛客:JZ3 从尾到头打印链表 1.1.1题目 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 1.1.2解法一:利用栈 栈先进后出 import java.util.ArrayList; import java.util.Stack; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNo原创 2021-09-29 16:50:12 · 81 阅读 · 0 评论 -
Java二叉树的遍历递归和非递归(先、中、后)+层次
一、先中后层遍历简介 如图所示二叉树 先序遍历:FCADBEHGM 根左右 中序遍历:ACBDFHEMG 左根右 后续遍历:ABDCHMGEF 左右根 层次遍历:FCEADHGBM 一层一层遍历 二、递归先序、中序、后序 下面案例构造的树结构如下图 /** * @Author: cy * @Description: * 递归方法:先序、中序、后序遍历树 */ public class Demo1 { public static void main(String[] args原创 2021-09-27 21:18:25 · 200 阅读 · 0 评论