
树
豌豆射手GCC
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
堆栈+优化 331. 验证二叉树的前序序列化
331. 验证二叉树的前序序列化序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。 _9_/ \3 2/ \ / 4 1 # 6/ \ / \ / \# # # #例如,上面的二叉树可以被序列化为字符串 “9,3,4,#,#,1,#,#,2,#,6,#,#”,其中 # 代表一个空节点。给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个原创 2020-06-20 13:30:22 · 224 阅读 · 0 评论 -
multiset(平衡树)+分治(归并) 327. 区间和的个数
327. 区间和的个数给定一个整数数组 nums,返回区间和在 [lower, upper] 之间的个数,包含 lower 和 upper。区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。说明:最直观的算法复杂度是 O(n2) ,请在此基础上优化你的算法。示例:输入: nums = [-2,5,-1], lower = -2, upper = 2,输出: 3 解释: 3个区间分别是: [0,0], [2,2], [0,2],它们原创 2020-06-19 13:23:48 · 326 阅读 · 0 评论 -
堆栈迭代+DFS递归 1028. 从先序遍历还原二叉树
1028. 从先序遍历还原二叉树我们从二叉树的根节点 root 开始进行深度优先搜索。在遍历中的每个节点处,我们输出 D 条短划线(其中 D 是该节点的深度),然后输出该节点的值。(如果节点的深度为 D,则其直接子节点的深度为 D + 1。根节点的深度为 0)。如果节点只有一个子节点,那么保证该子节点为左子节点。给出遍历输出 S,还原树并返回其根节点 root。示例 1:输入:"1-2--3--4-5--6--7"输出:[1,2,5,3,4,6,7]示例 2:输入:"1-2--3--原创 2020-06-18 11:58:46 · 242 阅读 · 0 评论 -
线段树 307. 区域和检索 - 数组可修改
307. 区域和检索 - 数组可修改给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。update(i, val) 函数可以通过将下标为 i 的数值更新为 val,从而对数列进行修改。示例:Given nums = [1, 3, 5]sumRange(0, 2) -> 9update(1, 2)sumRange(0, 2) -> 8说明:数组仅可以在 update 函数下进行修改。你可以假设 update原创 2020-06-16 13:31:49 · 138 阅读 · 0 评论 -
引用 297. 二叉树的序列化与反序列化
297. 二叉树的序列化与反序列化序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例:你可以将以下二叉树: 1 / \ 2 3 / \ 4 5序列化为原创 2020-06-08 14:22:59 · 162 阅读 · 0 评论 -
二分查找完全二叉树 222. 完全二叉树的节点个数
222. 完全二叉树的节点个数给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例:输入: 1 / \ 2 3 / \ /4 5 6输出: 6根据完全二叉树的节点序号,查找该节点(1)mkroute得到该节点的路径;(2)havenode从root沿着路径到该节原创 2020-06-01 11:02:24 · 300 阅读 · 0 评论 -
队列遍历二叉树 101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [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 3 进阶:你可以运用递归和迭代两种方法解决这个问题吗?递归方法每次传入两个节点,判断是否相同;/** * Definition for a binary原创 2020-05-31 13:39:03 · 158 阅读 · 0 评论 -
二叉树+动态规划+记忆型递归 337. 打家劫舍 III
337. 打家劫舍 III在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2,3,null,3,null,1] 3 / \ 2 3原创 2020-05-30 11:45:00 · 213 阅读 · 0 评论 -
morris+stack 前序遍历+后序遍历 144. 二叉树的前序遍历 145. 二叉树的后序遍历
144. 二叉树的前序遍历给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?解题stack迭代或 morris遍历(空间O(1));前序遍历:迭代/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeN原创 2020-05-24 13:55:19 · 226 阅读 · 0 评论 -
递归+遍历二叉树 124. 二叉树中的最大路径和
124. 二叉树中的最大路径和给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7输出: 42解题:1对每个节点得到左边的最大值和右边原创 2020-05-20 13:35:46 · 318 阅读 · 0 评论 -
简单递归+层序遍历(记录层数) 116. 填充每个节点的下一个右侧节点指针 117. 填充每个节点的下一个右侧节点指针 II
递归实现填充节点/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}原创 2020-05-19 14:02:50 · 383 阅读 · 0 评论 -
类似morris算法 改变二叉树的构造 114. 二叉树展开为链表
114. 二叉树展开为链表给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6解题类似莫里斯算法,将从根节点开始的左子树接到右子树上,将原本右子树的节点接到新接节点的最右侧,然后将左子树为null,继续检查右子树;/** * Definiti原创 2020-05-18 15:28:02 · 198 阅读 · 0 评论 -
递归+链表+填空树 108. 将有序数组转换为二叉搜索树 109. 有序链表转换二叉搜索树
108. 将有序数组转换为二叉搜索树将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5解题递归求解,每次找中间的点作为根节点;解法1:每次取中间右边的点原创 2020-05-18 13:46:38 · 140 阅读 · 0 评论 -
递归+二叉树的前中后序遍历转换 105. 从前序与中序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解题递归得到每个子节点,返回节点;注意点右子树的节点为getnode(preorder,inorder,i+t-start+1,t+1,end);原创 2020-05-17 14:12:21 · 198 阅读 · 0 评论 -
搜索二叉树的中序遍历(有序性)+ morris解法(空间复杂度O(1)) 99. 恢复二叉搜索树
99. 恢复二叉搜索树二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。示例 1:输入: [1,3,null,null,2] 1 / 3 \ 2输出: [3,1,null,null,2] 3 / 1 \ 2示例 2:输入: [3,1,4,null,null,2] 3 / \1 4 / 2输出: [2,1,4,null,null,3] 2 / \1 4 / 3进阶:原创 2020-05-16 14:40:00 · 321 阅读 · 0 评论 -
迭代+莫里斯 94. 二叉树的中序遍历
94. 二叉树的中序遍历给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?迭代算法:堆栈利用堆栈,根节点入栈——进入左子节点;若当前节点为NULL,栈内节点出栈并放入结果数组——进入右子节点;直到堆栈为空停止;(栈内需要新放入一个空节点,不然会提前退出);/** * Definition for a binary tree nod原创 2020-05-15 14:21:48 · 165 阅读 · 0 评论 -
前缀树+字典树 211. 添加与搜索单词 - 数据结构设计
设计一个支持以下两种操作的数据结构:void addWord(word)bool search(word)search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z 。 . 可以表示任何一个字母。示例:addWord("bad")addWord("dad")addWord("mad")search("pad") -> falsesearch("bad") -> truesearch(".ad") -> truesearch("b.."原创 2020-05-12 19:37:14 · 181 阅读 · 0 评论 -
前缀和+字典树 208. 实现 Trie (前缀树) 字典树+dfs 212. 单词搜索 II
208. 实现 Trie (前缀树)实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.startsWith("app"); // 返回 truetrie.insert("app"); tr原创 2020-05-12 18:36:12 · 237 阅读 · 0 评论 -
二叉树前序遍历转KMP+二叉树匹配 572. 另一个树的子树
572. 另一个树的子树给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s: 3 / \ 4 5 / \ 1 2给定的树 t: 4 / \ 1 2返回 true,因为 t 与 s 的...原创 2020-05-07 13:20:35 · 220 阅读 · 0 评论 -
递归验证(记录当前遍历最小最大值)+中序遍历 98. 验证二叉搜索树
98. 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ ...原创 2020-05-05 12:49:53 · 174 阅读 · 0 评论 -
判断图是否连通+判断图是否有环+并集得到最深叶节点 1021 Deepest Root (25分)
1021 Deepest Root (25分)A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root. Now you are supposed to find the root that results in a hi...原创 2020-04-29 12:46:00 · 238 阅读 · 0 评论 -
后序遍历+中序遍历+层序遍历+数组表示二叉树 1020 Tree Traversals (25分)
1020 Tree Traversals (25分)Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order tr...原创 2020-04-28 16:52:44 · 230 阅读 · 0 评论 -
二叉树层序遍历+BFS 199. 二叉树的右视图
199. 二叉树的右视图给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---来源:...原创 2020-04-22 22:18:56 · 193 阅读 · 0 评论 -
多叉树层序遍历+统计多叉树叶节点 1004 Counting Leaves (30分)
A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.Input Specification:Each input file contains one test case. Each case starts w...原创 2020-04-22 14:04:40 · 1177 阅读 · 0 评论 -
链表表示二叉树+二叉搜索树+AVL树 复习
二叉树的结点表示左子树,右子树,结点数据typedef struct TNode *Position;typedef Position BinTree; /* 二叉树类型 */struct TNode{ /* 树结点定义 */ ElementType Data; /* 结点数据 */ BinTree Left; /* 指向左子树 */ BinTree Rig...原创 2020-04-22 13:03:36 · 185 阅读 · 0 评论 -
哈夫曼树 与 哈夫曼编码 (由最小堆构建)复习
哈夫曼树每个结点的权值乘以与根结点的路径长度之和最小的树——最优二叉树哈夫曼树的特点: 没有度为1的结点; 哈夫曼树的任意非叶节点的左右子树交换后仍是哈夫曼树; n个叶子结点的哈夫曼树共有2n-1个结点; 对同一组权值{w1 ,w2, …… , wn},存在不同构的哈夫曼树哈夫曼树的构成将二叉树按结点权值大小转化成最小堆,每次取堆定两个元素组成新的二叉树结点,插回堆中;当...原创 2020-04-13 01:02:28 · 624 阅读 · 0 评论 -
C 堆 通用构建方法 复习
堆1.堆结点的类型定义堆的当前元素个数堆的最大容量存储元素的数组typedef struct HNode *Heap; /* 堆的类型定义 */struct HNode { ElementType *Data; /* 存储元素的数组 */ int Size; /* 堆中当前元素个数 */ int Capacity; /* 堆的最大容量...原创 2020-04-11 23:16:43 · 127 阅读 · 0 评论 -
C 最小堆的构建 霍夫曼树的性质 05-树9 Huffman Codes (30分)
05-树9 Huffman Codes (30分)In 1953, David A. Huffman published his paper “A Method for the Construction of Minimum-Redundancy Codes”, and hence printed his name in the history of computer science. As a...原创 2020-04-07 16:10:06 · 273 阅读 · 0 评论 -
C 树表示集合 05-树8 File Transfer (25分) 按秩归并+路径压缩
05-树8 File Transfer (25分)We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send...原创 2020-04-07 00:21:10 · 272 阅读 · 0 评论 -
C 最小堆的构建与路径查找 05-树7 堆中的路径 (25分)
05-树7 堆中的路径 (25分)将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在...原创 2020-04-06 14:49:58 · 228 阅读 · 0 评论 -
C 完全二叉树和二叉搜索树 列表表示树 04-树6 Complete Binary Search Tree (30分)
04-树6 Complete Binary Search Tree (30分)A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys ...原创 2020-04-06 01:10:42 · 189 阅读 · 0 评论 -
C AVL树构造练习 04-树5 Root of AVL Tree (25分)
04-树5 Root of AVL Tree (25分)An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by ...原创 2020-04-05 14:10:32 · 400 阅读 · 0 评论 -
C 二叉搜索树的构造与遍历 04-树4 是否同一棵二叉搜索树 (25分)
04-树4 是否同一棵二叉搜索树 (25分)给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)...原创 2020-04-04 18:23:00 · 324 阅读 · 0 评论 -
C 二叉搜索树的接口操作训练 04-树7 二叉搜索树的操作集 (30分)
04-树7 二叉搜索树的操作集 (30分)本题要求实现给定二叉搜索树的5种常用操作。函数接口定义:BinTree Insert( BinTree BST, ElementType X );BinTree Delete( BinTree BST, ElementType X );Position Find( BinTree BST, ElementType X );Position Fi...原创 2020-04-04 14:03:51 · 176 阅读 · 0 评论 -
C 二叉树的前中后序遍历 03-树3 Tree Traversals Again (25分)
03-树3 Tree Traversals Again (25分)An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered f...原创 2020-04-04 11:53:49 · 209 阅读 · 0 评论 -
C 熟悉二叉树的构建 03-树2 List Leaves (25分)
03-树2 List Leaves (25分)Given a tree, you are supposed to list all the leaves in the order of top down, and left to right.Input Specification:Each input file contains one test case. For each case, t...原创 2020-04-03 21:26:22 · 179 阅读 · 0 评论