- 博客(170)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 KVM源码解析目录
kvm 源码解析目录kvm目录结构kvm类加载-001,介绍类加载的初始化工作kvm类加载-002, loadRawClass介绍kvm类加载-003,加载常量池kvm类加载-004,加载类的标识符,加载接口kvm类加载-005,加载字段kvm类加载-006,加载方法kvm link解析StackMap属性解析kvm类加载-007kvm 验证-模拟字节码执行...
2019-07-01 18:11:30
4776
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 spring boot 源码解析58-总结
经过慢慢的长路,关于spring boot 源码解析,到了该说再见的时候了,在本系列的揭秘中,有很多可以说是全网独家揭秘的,这个世界其实很奇怪,人们都很喜欢吃快餐,关于spring boot 如何使用的文章,浏览量很高,而关于源码揭秘的,浏览量很低…本人已与龙果学院合作,出一套spring boot 源码解析的课程,还有很多的内幕会在课程中讲述. 链接如下:Spring Boot源码解析后续的规划是
2018-02-05 12:20:54
16955
3
原创 965.univalued-binary-tree
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例 1:输入:[1,1,1,1,1,null,1]输出:true递归class Solution { public boolean isUnivalTree(TreeNode root) { return preOrder(root, root.val); } private boolean preOrder(TreeNode root, i
2021-08-07 14:02:22
237
原创 938.range-sum-of-bst
给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。示例 1:输入:root = [10,5,15,3,7,null,18], low = 7, high = 15输出:32解法使用中序遍历 暴力求解class Solution { public int rangeSumBST(TreeNode root, int low, int high) { if(root == null){ ret
2021-08-07 13:45:53
262
原创 897.increasing-order-search-tree
给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。示例 1:输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]解法使用哑节点在中序遍历的过程更新结果.class Solution { private TreeNode d
2021-08-07 13:33:41
230
原创 872.leaf-similar-trees
请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。示例 1:输入: root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,7,4,2,null,n
2021-08-07 13:10:36
212
原创 703.kth-largest-element-in-a-stream
设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。请实现 KthLargest 类:KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。示例:解法class KthLargest { PriorityQueue<Integer> pq; int k;
2021-08-07 12:48:05
105
原创 671.second-minimum-node-in-a-binary-tree
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。更正式地说,root.val = min(root.left.val, root.right.val) 总成立。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。示例 1:输入: root = [2,2,5,null,null,5,7]输出: 5解释: 最小的值是 2 ,第二小的值是 5 。
2021-08-07 12:17:51
139
原创 653.two-sum-iv-input-is-a-bst
给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。示例 1:输入: root = [5,3,6,2,4,null,7], k = 9输出: true提示:二叉树的节点个数的范围是 [1, 104].-104 <= Node.val <= 104root 为二叉搜索树-105 <= k <= 105解法class Solution { public boolean findTa
2021-08-07 11:54:25
170
原创 637.average-of-levels-in-binary-tree
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。示例 1:提示:节点值的范围在32位有符号整数范围内。解法class Solution { public List<Double> averageOfLevels(TreeNode root) { List<Double> res = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>();
2021-08-07 10:51:15
118
原创 617.merge-two-binary-trees
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:注意: 合并必须从两个树的根节点开始解法class Solution { public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { if (root1 == null &a
2021-08-07 10:41:34
133
原创 606.construct-string-from-binary-tree
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:示例 2:解法class Solution { private String res = ""; public String tree2str(TreeNode root) { preOrder(root); return res; } private void p
2021-08-07 10:04:12
88
原创 590.n-ary-tree-postorder-traversal
给定一个 N 叉树,返回其节点值的 后序遍历 。N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。进阶:递归法很简单,你可以使用迭代法完成此题吗?示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:[5,6,3,2,4,1]示例 2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,nu
2021-08-06 19:22:16
160
原创 589.n-ary-tree-preorder-traversal
给定一个 N 叉树,返回其节点值的 前序遍历 。N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。进阶:递归法很简单,你可以使用迭代法完成此题吗?示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:[1,3,5,6,2,4]示例 2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,nu
2021-08-06 17:29:36
266
原创 572.subtree-of-another-tree
给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。示例 1:输入:root = [3,4,5,1,2], subRoot = [4,1,2]输出:true示例 2:输入:root = [3,4,5,1,2,null,null,null,null,0],
2021-08-06 15:36:21
197
原创 563.binary-tree-tilt
给定一个二叉树,计算 整个树 的坡度 。一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。整个树 的坡度就是其所有节点的坡度之和。示例 1:输入:root = [1,2,3]输出:1解释:节点 2 的坡度:|0-0| = 0(没有子节点)节点 3 的坡度:|0-0| = 0(没有子节点)节点 1 的坡度:|2-3| = 1(左子树就是左子节点,所以和是 2 ;
2021-08-06 10:21:43
114
原创 559.maximum-depth-of-n-ary-tree
给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:3示例 2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]输出:5提示:树的深度不会超过
2021-08-05 16:14:03
130
原创 783.minimum-distance-between-bst-nodes
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。提示:树中节点数目在范围 [2, 100] 内0 <= Node.val <= 105差值是一个正数,其数值等于两值之差的绝对值解法由于是bst,因此使用中序遍历,同时由于需要pre节点(因为差值最小,因此只会发生前后相连的节点,其他的情况是不会最小的),因此需要使用模拟栈的方式的进行中序遍历.class Solution { public int minDiffInBST(TreeNo
2021-07-26 17:13:33
126
1
原创 543.diameter-of-binary-tree
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。**注意:**两结点之间的路径长度是以它们之间边的数目表示。解法首先要计算每个节点的路径长度,路径长度 = 左节点的深度+右节点的深度.由于可能存在重复计算,因此要使用备忘录.最后,在递归的时候,更新结果就行class Solution { privat
2021-07-26 17:13:06
131
原创 530.minimum-absolute-difference-in-bst
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。示例:输入:输出:1解释:最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。提示:树中至少有 2 个节点。解法由于是bst,因此使用中序遍历,同时由于需要pre节点(因为差值最小,因此只会发生前后相连的节点,其他的情况是不会最小的),因此需要使用模拟栈的方式的进行中序遍历.class Solution { private int min = Integer.MAX_
2021-07-26 17:12:23
142
原创 501.find-mode-in-binary-search-tree
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值结点右子树中所含结点的值大于等于当前结点的值左子树和右子树都是二叉搜索树例如:给定 BST [1,null,2,2],返回[2].**提示:**如果众数超过1个,不需考虑输出顺序**进阶:**你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)解法使用中序遍历 class Solution { pu
2021-06-29 12:19:41
123
原创 404.sum-of-left-leaves
计算给定二叉树的所有左叶子之和。示例:在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24解法使用递归,前序遍历,由于只处理左节点,因此加一个标记位区分即可.class Solution { private int res = 0 ; public int sumOfLeftLeaves(TreeNode root) { walk(root,null); return res; } private void walk
2021-06-29 11:27:17
109
原创 257.binary-tree-paths
给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入:输出: [“1->2->5”, “1->3”]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3解法使用递归,前序遍历即可class Solution { List<String> res = new ArrayList<>(); public List<String> binaryTreePa
2021-06-29 11:14:33
127
原创 235.lowest-common-ancestor-of-a-binary-search-tree
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6解释: 节点 2 和
2021-06-28 20:28:23
631
原创 226.invert-binary-tree
翻转一棵二叉树。示例:备注:这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。解法使用后序遍历class Solution { public TreeNode invertTree(TreeNode root) { if(null == root) { return null; } T
2021-06-28 19:19:45
653
原创 112.path-sum
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true示例 2:输入:root = [1,2,3], targetSum = 5输出:false示例 3:输入:root =
2021-06-28 18:57:49
641
原创 111.minimum-depth-of-binary-tree
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 1:输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5bfsclass Solution1 { public int minDepth(TreeNode root) { if (null == root) { ret
2021-06-17 21:52:15
618
1
原创 110.balanced-binary-tree
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true提示:树中的节点数在范围 [0, 5000] 内-104 <= Node.val <=
2021-06-17 21:51:38
674
原创 108.convert-sorted-array-to-binary-search-tree
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:示例 2:输入:nums = [1,3]输出:[3,1]解释:[1,3] 和 [3,1] 都是高度平衡二叉搜索树。提示
2021-06-15 12:14:21
1609
2
原创 104.maximum-depth-of-binary-tree
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。递归可以使用前序遍历,进行递归求解.class Solution { public int maxDepth(TreeNode root) { if(null == root) { return 0; } return
2021-06-15 12:13:04
1586
原创 Object源码解析
简介Object 作为所有类的父类,如果一个类没有显式继承任何类,则会隐式继承 Object 类.在该类中定义了在java世界中类的基本行为.方法解析注册本地方法 private static native void registerNatives(); static { registerNatives(); }关于本地方法的介绍,会在后续文章介绍.获得class对象public final native Class<?> getClass();生
2021-06-15 10:11:45
1692
原创 145.binary-tree-postorder-traversal
给定一个二叉树,返回它的 后序 遍历。示例:进阶: 递归算法很简单,你可以通过迭代算法完成吗?递归class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); walk(root,res); return res; } private vo
2021-06-11 11:18:02
1922
1
原创 144.binary-tree-preorder-traversal
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100进阶: 递归
2021-06-11 11:17:23
1909
1
原创 101.symmetric-tree
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:解法1通过递归的方式:class Solution { public boolean isSymmetric(TreeNode root) { if(null == root) { return false; } return check(root.left,root.right); }
2021-06-11 11:16:20
1897
1
原创 100.[leetcode]same-tree
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,2], q = [1,null,2]输出:false示例 3:输入:p = [1,2,1], q = [1,1,2]输出:false提示:两棵树上的节点数目都在范围 [0, 100] 内-104 <= Node.val &l
2021-06-11 11:14:38
1909
1
原创 94.binary-tree-inorder-traversal
给定一个二叉树的根节点 root ,返回它的 中序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[2,1]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100进阶: 递归算
2021-06-11 11:12:35
1923
1
原创 eclipse设置总结
eclipse设置总结说明本人应该可以算是个老码农,对于IDE方面,一直使用的是eclipse.没有使用过idea开发(只是用其看过源码,如spark,kafka).写本文的目的是,当我以后换电脑,更换工作环境时,对于eclipse的设置有一个总结.不用再在网上搜一大堆的东西.能够提高效率.eclipse优化eclipse.ini 的修改: 需要根据自己电脑的配置进行修改,如,本人的...
2019-10-21 11:09:24
2139
1
原创 kvm线程-007-线程状态-THREAD_SUSPENDED,THREAD_DEAD
本文介绍线程状态THREAD_SUSPENDED,THREAD_DEAD的使用。THREAD_SUSPENDE该状态设置的地方为:startThread,该方法在kvm线程-006-线程状态-THREAD_ACTIVE 中有介绍suspendThread,该方法的代码如下:void suspendThread(void){ // 1. 如果CurrentThread 为null...
2019-07-25 16:41:33
5487
1
原创 kvm线程-006-线程状态-THREAD_ACTIVE
本文介绍线程状态THREAD_ACTIVE的使用.设置线程状态THREAD_ACTIVE的地方有:InitializeThreading,这点在kvm启动流程-006 中有详细介绍.resumeThread,其代码如下: void resumeThread(THREAD thisThread) { // 如果状态不是THREAD_SUSPENDED,则抛出异常...
2019-07-25 14:47:39
5303
原创 kvm线程-005-线程状态-THREAD_JUST_BORN
在kvm内部定义了线程状态,如下: enum { THREAD_JUST_BORN = 1, /* 还没有启动*/ THREAD_ACTIVE = 2, /* 当前正在运行,或者在等待运行的队列中*/ THREAD_SUSPENDED = 4, /* 等待monitor或者alarm */ THR...
2019-07-25 11:00:45
5377
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人