数据结构-树
xushiyu1996818
这个作者很懒,什么都没留下…
展开
-
剑指offer-50-树中两个节点的最低公共祖先-java
1原创 2021-01-16 12:49:43 · 138 阅读 · 0 评论 -
剑指offer-39-二叉树的深度-java
题目及测试package sword039;/*题目:输入一棵二叉树的根节点,求该数的深度。从根节点到叶结点依次进过的结点(含根,叶结点)形成树的一条路径,最长路径的长度为树的深度。*/public class main { public static void main(String[] args) { Object[] x=new Object[]{3,9,20,null,null,15,7}; BinaryTree tree=new BinaryTree(x);原创 2020-12-31 20:39:42 · 107 阅读 · 0 评论 -
剑指offer-27-二叉搜索树与双向链表-java
题目及测试package sword027;/*题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。*/public class main { public static void main(String[] args) { Object[] x=new Object[]{4,1,6,0,2,5,7,null,null,null,3,null,null,null,8}; BinaryTree tree=new原创 2020-12-05 11:18:50 · 158 阅读 · 1 评论 -
剑指offer-25-二叉树中和为某一值的路径-java
题目及测试package sword025;import java.util.List;/*题目:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。 * 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 * (注意: 在返回值的list中,数组长度大的数组靠前)*/public class main { public static void main(String[] args) { Object[] x=new Obj原创 2020-12-05 11:17:24 · 200 阅读 · 1 评论 -
剑指offer-24-二叉搜索树的后序遍历序列-java
题目及测试package sword024;/*题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后续遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同例如:输入数组{5,7,6,9,11,10,8},则经判断是二叉搜索树,返回true;如果输入数组{7,4,6,5},则经判断 不是二叉搜索树,返回false。 8 / \ 6原创 2020-12-05 11:13:32 · 119 阅读 · 0 评论 -
剑指offer-23-从上往下打印二叉树-java
题目及测试package sword023;import java.util.List;/*从上往下打印出二叉树的每个节点,同层节点从左至右打印。*/public class main { public static void main(String[] args) { Object[] x=new Object[]{1,2,2,3,4,4,3}; BinaryTree tree=new BinaryTree(x); BinaryTree.printTree(tree.原创 2020-11-28 14:05:03 · 116 阅读 · 0 评论 -
剑指offer-19-二叉树的镜像-java
题目及测试package sword019;/*题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像;*/public class main { public static void main(String[] args) { Object[] x=new Object[]{4,1,6,0,2,5,null}; BinaryTree tree=new BinaryTree(x); BinaryTree.printTree(tree.root); test(t原创 2020-11-19 20:52:33 · 139 阅读 · 0 评论 -
剑指offer-18-树的子结构-java
题目及测试package sword018;/*题目描述:输入两棵二叉树A和B,判断B是不是A的子结构;*/public class main { public static void main(String[] args) { Object[] x=new Object[]{1,3,2,5,2,4,8}; BinaryTree tree=new BinaryTree(x); BinaryTree.printTree(tree.root); Object[] x原创 2020-11-19 20:52:18 · 99 阅读 · 0 评论 -
剑指offer-6-重建二叉树-java
题目及测试package sword006;/* 重建二叉树 * 问题描述:输入某二叉树的前序遍历和中序遍历结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中 * 都不包含重复的数字。例如输入前序遍历序列:{1,2,4,7,3,5,6,8}和中序遍历{4,7,2,1,5,3,8,6}, * 则重建出图中所示二叉树并且输出它的头结点。 */public class main { /** * @param args * @throws Exception原创 2020-10-30 10:54:57 · 130 阅读 · 0 评论 -
leetcode-617-合并二叉树-java
题目及测试package pid617;/*617. 合并二叉树给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 1原创 2020-10-16 16:31:15 · 156 阅读 · 0 评论 -
leetcode-543-二叉树的直径-java
题目及测试package pid543;/*543. 二叉树的直径给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径长度是以它们之间原创 2020-09-29 10:42:20 · 245 阅读 · 0 评论 -
leetcode-538-把二叉搜索树转换为累加树-java
题目及测试package pid538;/*538. 把二叉搜索树转换为累加树给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件: 节点的左子树仅包含键 小于 节点键的节点。 节点的右子树仅包含键 大于 节点键的节点。 左右子树也必须是二叉搜索树。注意:本题和 1038: https://le原创 2020-09-28 09:57:57 · 167 阅读 · 0 评论 -
leetcode-437-路径总和 III-java
题目及测试package pid437;/* 437. 路径总和 III给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10原创 2020-08-30 15:28:43 · 153 阅读 · 0 评论 -
leetcode-226-翻转二叉树-java
题目及测试package pid226;/*226. 翻转二叉树翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1备注:这个问题是受到 Max Howell 的 原问题 启发的 : 谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这原创 2020-08-10 15:15:28 · 256 阅读 · 0 评论 -
leetcode-114-二叉树展开为链表-java
题目及测试package pid114;/*114. 二叉树展开为链表给定一个二叉树,原地将它展开为一个单链表。 例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6*/public class main { public static void main原创 2020-08-04 10:48:39 · 262 阅读 · 0 评论 -
leetcode-208-实现Trie (前缀树)-java
题目及测试package pid208;/* 实现 Trie (前缀树)实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.startsWith("app"); // 返回 true原创 2020-06-29 11:51:25 · 218 阅读 · 0 评论 -
并查集总结-java版
目录并查集简介建立并查集(初始化)建立关系查找root与路径压缩算法代码与测试并查集简介并查集的功能如下:如果a和b是舍友,b和c是舍友,则我们认定a和c也是舍友(当然在离散数学中这是错误的,为了引入我们假定自己和自己也是舍友)。也就是说有n个人,给出m个元组(a,b)表示a和b是舍友,现在有许多查询:请你判断任意两个人之间是否有舍友关系。复杂度来讲,建立和查询...原创 2019-12-12 14:25:41 · 165 阅读 · 0 评论 -
leetcode-124-二叉树中的最大路径和-java
题目及测试package pid124;/*二叉树中的最大路径和给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null...原创 2019-12-11 14:49:50 · 242 阅读 · 0 评论 -
leetcode-236-二叉树的最近公共祖先-java
题目及测试package pid236;/*二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,n...原创 2019-12-10 15:10:56 · 164 阅读 · 0 评论 -
前缀树(字典树)总结-java版
目录前缀树的概述前缀树的应用场景前缀树的java实现节点前缀树(增加,查询字符串数量,查询前缀数量)测试与DFA查询敏感词的类似与不同类似不同前缀树的概述前缀树又名字典树,单词查找树,Trie树,是一种多路树形结构,是哈希树的变种,和hash效率有一拼,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经...原创 2019-04-17 15:01:21 · 2912 阅读 · 0 评论 -
二叉树 工具类 java (创建,前中后序遍历,层次打印,广度优先深度优先遍历)
树的节点类package datastructure.binarytree;public class TreeNode { int val; public TreeNode left; public TreeNode right; public TreeNode(int x) { val = x; left=null; right=null; }}二叉树...原创 2018-09-26 11:11:06 · 1120 阅读 · 0 评论 -
2-3树与2-3-4树总结-java版
目录2-3树简介插入删除2-3-4树简介插入删除2-3树简介2-3树是一棵自平衡的多路查找树,它并不是一棵二叉树,具有如下性质:(1)每个节点有1个或2个key,对应的子节点为2个子节点或3个子节点;(2)所有叶子节点到根节点的长度一致;(3)每个节点的key从左到右保持了从小到大的顺序,两个key之间的子树中所有的key一定大于它的父节点的...原创 2019-05-30 13:46:17 · 415 阅读 · 1 评论 -
默克尔树(Merkle Tree)总结
目录为什么要有默克尔树简介Merkle Tree的特点图解创建树检索-文件夹比较检索-防伪更新插入删除应用数字签名P2P网络可信计算区块链-简单验证支付为什么要有默克尔树Hash是一个把任意长度的数据映射成固定长度数据的函数[2]。例如,对于数据完整性校验,最简单的方法是对整个数据做Hash运算得到固定长度的Hash值,然后把得到的H...原创 2019-05-16 16:42:14 · 15087 阅读 · 2 评论 -
LSM树(日志结构合并树)总结-java版
目录为什么要有LSM树数据库存储引擎索引的底层结构BTree的随机写特点LSM树的诞生背景简介LSM树与B树的差异LSM树优化LSM树基本原理LevelDB中的LSMHBase中的LSM树图解插入查找删除为什么要有LSM树数据库存储引擎索引的底层结构哈希存储引擎是哈希表的持久化实现,支持增、删、改以及随机读取操作,但不支持顺序...原创 2019-05-16 11:45:01 · 5577 阅读 · 1 评论 -
leetcode-103-二叉树的锯齿形层次遍历(binary tree zigzag level order traversal)-java
题目及测试package pid103;import java.util.List;/* 二叉树的锯齿形层次遍历给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 ...原创 2018-11-15 10:21:37 · 516 阅读 · 0 评论 -
leetcode-105- 从前序与中序遍历序列构造二叉树(construct binary tree from preorder and inorder traversal)-java
题目及测试package pid105;/*从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ ...原创 2018-11-16 17:26:13 · 192 阅读 · 0 评论 -
leetcode-94-二叉树的中序遍历(binary tree inorder traversal)-java
题目及测试package pid094;import java.util.List;/*中序遍历二叉树给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?}*/public class main { ...原创 2018-11-14 11:25:23 · 228 阅读 · 0 评论 -
leetcode- 102-二叉树的层次遍历(binary tree level order traversal)-java
题目及测试package pid102;import java.util.List;/*二叉树的层次遍历给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3],...原创 2018-09-21 14:45:12 · 944 阅读 · 0 评论 -
leetcode-108-将有序数组转换为二叉搜索树(convert sorted array to binary search tree)-java
题目及用例package pid108;import java.util.List;/*将有序数组转换为二叉搜索树将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,...原创 2018-09-26 11:03:37 · 233 阅读 · 0 评论 -
leetcode-101-对称二叉树(symmetric tree)-java
题目及用例package pid101;/*对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 ...原创 2018-09-20 12:31:33 · 194 阅读 · 0 评论 -
leetcode-98-验证二叉搜索树(validat binary search tree)-java
题目package pid098;/*验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输...原创 2018-09-19 11:13:49 · 1303 阅读 · 0 评论 -
leetcode-二叉树总结
leetcode-104-二叉树的最大深度(maximum depth of binary tree)查询树的深度,一般有两种方法第一种,递归,长度=当前长度(1)+左右子树的max长度第二种,一层层遍历,next为now的左右子树,然后now=next,直到now为空...原创 2018-09-18 14:51:55 · 493 阅读 · 0 评论 -
leetcode-116- 填充同一层的兄弟节点(populating next right pointers in each node)-java
题目及测试(测试不可用)package pid116;/*每个节点的右向指针给定一个二叉树struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指...原创 2018-11-19 13:19:25 · 233 阅读 · 0 评论 -
leetcode-230-二叉搜索树中第K小的元素(kth smallest element in a bst)-java
题目及测试package pid230;/* 二叉搜索树中第K小的元素给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 1...原创 2018-11-20 11:33:08 · 449 阅读 · 0 评论 -
线段树总结-java版
目录为什么要有线段树简介得到min的线段树样例java实现合成器线段树测试为什么要有线段树下面我们从一个经典的例子来了解线段树,问题描述如下:从数组arr[0...n-1]中查找某个数组某个区间内的最小值,其中数组大小固定,但是数组中的元素的值可以随时更新。对这个问题一个简单的解法是:遍历数组区间找到最小值,时间复杂度是O(n),额外的空间复杂度O(1...原创 2019-05-20 11:23:04 · 2840 阅读 · 3 评论 -
哈希树总结-java版
目录哈希树的理论基础质数分辨定律余数分辨定理哈希树简介查找删除优点缺点哈希树的java实现节点哈希树哈希树的应用哈希树的理论基础质数分辨定律这个定理可以简单的表述为:n个不同的质数可以“分辨”的连续整数的个数和他们的乘积相等。“分辨”就是指这些连续的整数不可能有完全相同的余数序列。这个为哈希树的分辨方式奠定了理论基础。显然,这个定理...原创 2019-04-19 15:42:36 · 1269 阅读 · 0 评论 -
后缀树总结-java版
目录后缀树简介字典树(前缀树)的概念后缀树的概念构造后缀树两种方法在平方时间内构件后缀树线性时间建立后缀树的理论直接在后缀树上操作 自动更新叶节点当新后缀出现在原先后缀树中线性时间建立后缀树的实现后缀树的应用后缀树简介字典树(前缀树)的概念可以参考 https://blog.csdn.net/xushiyu1996818/art...原创 2019-04-22 16:00:27 · 888 阅读 · 0 评论 -
B树,B+树,B*树总结-java版
目录前言B树简介用阶定义的B树用度定义的B树B树关键字的定义结构查找树的创建插入删除B树的高度B+树简介B+树相对于B树的优点查找插入删除B*树简介增加三种树的总结前言动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tr...原创 2019-04-30 17:05:34 · 948 阅读 · 0 评论 -
leetcode-297-二叉树的序列化与反序列化 (seriliaze and deseriliaze binary tree)-java
题目及测试package pid297;/* 二叉树的序列化与反序列化序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符...原创 2019-01-16 11:41:22 · 372 阅读 · 0 评论 -
AVL平衡二叉树总结+java实现
目录普通二叉搜索树的问题AVL树定义AVL树和节点的结构AVL树高度计算方法AVL树旋转LL 右旋转RR 左旋转LR 左旋右旋RL 右旋左旋平衡节点插入节点删除节点查找最大最小节点删除完整代码主程序叶节点avl树普通二叉搜索树的问题普通二叉树(二叉查找树)在操作的时间复杂度上不一定遵循O(㏒n),也有可能是O(n),...原创 2018-12-17 14:41:50 · 364 阅读 · 0 评论