树、二叉树
码奴生来就只知道前进
我的GitHub账号:www.github.com/Mrhuangyi
展开
-
1167. 连接棒材的最低费用
题目描述为了装修新房,你需要加工一些长度为正整数的棒材 sticks。如果要将长度分别为 X 和 Y 的两根棒材连接在一起,你需要支付 X + Y 的费用。 由于施工需要,你必须将所有棒材连接成一根。返回你把所有棒材 sticks 连成一根所需要的最低费用。注意你可以任意选择棒材连接的顺序。示例 1:输入:sticks = [2,4,3]输出:14解释:先将 2 和 3 连接成 5,...原创 2019-08-26 14:18:32 · 473 阅读 · 0 评论 -
700. 二叉搜索树中的搜索
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和值: 2 你应该返回如下子树: 2 / \ 1 3在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我...原创 2018-08-11 12:09:41 · 463 阅读 · 0 评论 -
783. 二叉搜索树结点最小距离
给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。示例:输入: root = [4,2,6,1,3,null,null]输出: 1解释:注意,root是树结点对象(TreeNode object),而不是数组。给定的树 [4,2,6,1,3,null,null] 可表示为下图: 4 / \ 2 ...原创 2018-08-10 22:43:02 · 781 阅读 · 0 评论 -
669. 修剪二叉搜索树
给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。示例 1:输入: 1 / \ 0 2 L = 1 R = 2输出: 1 \ 2示例 2:输入: ...原创 2018-08-10 21:53:30 · 309 阅读 · 2 评论 -
427. 建立四叉树
我们想要使用一棵四叉树来储存一个 N x N 的布尔值网络。网络中每一格的值只会是真或假。树的根结点代表整个网络。对于每个结点, 它将被分等成四个孩子结点直到这个区域内的值都是相同的.每个结点还有另外两个布尔变量: isLeaf 和 val。isLeaf 当这个节点是一个叶子结点时为真。val 变量储存叶子结点所代表的区域的值。你的任务是使用一个四叉树表示给定的网络。下面的例子将有助于你理...原创 2018-08-01 14:57:58 · 4126 阅读 · 0 评论 -
501. 二叉搜索树中的众数
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树 例如: 给定 BST [1,null,2,2], 1 \ 2 / 2返回[2].提示:如果众数超...原创 2018-07-31 23:16:47 · 1128 阅读 · 0 评论 -
563. 二叉树的坡度
给定一个二叉树,计算整个树的坡度。一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。整个树的坡度就是其所有节点的坡度之和。示例:输入: 1 / \ 2 3输出: 1解释: 结点的坡度 2 : 0结点的坡度 3 : 0结点的坡度 1 : |2-3| = 1树的坡...原创 2018-07-31 22:56:54 · 1011 阅读 · 0 评论 -
606. 根据二叉树创建字符串
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4 输出: "1(2(4))(3)"解释: 原本...原创 2018-07-31 22:33:39 · 459 阅读 · 0 评论 -
437. 路径总和 III
给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8...原创 2018-07-22 17:28:38 · 446 阅读 · 0 评论 -
872. 叶子相似的树
考虑一个二叉树的所有叶子。这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。举个例子,给定一个如上图所示的树,其叶值序列为 (6, 7, 4, 9, 8) 。如果两个二叉树的叶值序列相同,我们就认为它们是 叶相似的。如果给定的两个头结点分别为 root1 和 root2 的树是叶相似的,返回 true;否则返回 false 。提示:给定的两个树会有 1 到 100 个结...原创 2018-07-26 22:20:04 · 504 阅读 · 0 评论 -
530. 二叉搜索树的最小绝对差
给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值。示例 :输入: 1 \ 3 / 2输出:1解释: 最小绝对差为1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。 注意: 树中至少有2个节点。分析:二叉搜索树的中序遍历为升序序列,因此问题就转化为这个生序序列相邻两个值的差的最小值。/**...原创 2018-07-26 21:29:56 · 767 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] _______3______ ...原创 2018-12-13 21:38:39 · 382 阅读 · 0 评论 -
199. 二叉树的右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---考察二叉树的遍历,迭代法借助队...原创 2018-11-23 22:48:05 · 195 阅读 · 0 评论 -
98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3...原创 2018-09-15 11:58:05 · 230 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7通过前序遍历找到根节点通过根结点将中序遍历的数据拆分为两部分...原创 2018-09-10 20:46:04 · 140 阅读 · 0 评论 -
106. 从中序与后序遍历序列构造二叉树
根据一棵树的中序遍历与后序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7分析:给出一棵二叉树的中序遍历序列和后序遍历序列,要求重建二叉树...原创 2018-09-10 20:37:02 · 132 阅读 · 0 评论 -
114. 二叉树展开为链表
给定一个二叉树,原地将它展开为链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6前序遍历二叉树同时分别将左右子树压入栈中/** * Definition...原创 2018-09-12 17:48:56 · 579 阅读 · 0 评论 -
95. 不同的二叉搜索树 II
给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。示例:输入: 3输出:[ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3]]解释: 以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 3 ...原创 2018-09-16 19:38:22 · 332 阅读 · 0 评论 -
117. 填充同一层的兄弟节点 II
给定一个二叉树struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。说...原创 2018-09-12 10:34:38 · 143 阅读 · 0 评论 -
116. 填充同一层的兄弟节点
给定一个二叉树struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。说...原创 2018-09-12 10:27:57 · 122 阅读 · 0 评论 -
103. 二叉树的锯齿形层次遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]/** * De...原创 2018-09-11 20:01:10 · 491 阅读 · 0 评论 -
687. 最长同值路径
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。注意:两个节点之间的路径长度由它们之间的边数表示。示例 1:输入: 5 / \ 4 5 / \ \ 1 1 5输出:2示例 2:...原创 2018-08-21 16:16:02 · 545 阅读 · 2 评论 -
543. 二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是...原创 2018-07-28 22:56:02 · 1061 阅读 · 7 评论 -
572. 另一个树的子树
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1: 给定的树 s: 3 / \ 4 5 / \ 1 2给定的树 t: 4 / \ 1 2返回 true,因为 t 与 s 的一个子树拥有相同的...原创 2018-07-19 18:38:48 · 354 阅读 · 0 评论 -
110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]3/ \ 9 20 / \ 15 7 返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,...原创 2018-05-28 17:07:16 · 463 阅读 · 0 评论 -
226. 翻转二叉树
翻转一棵二叉树。示例:输入:4 / \ 2 7 / \ / \ 1 3 6 9 输出:4 / \ 7 2 / \ / \ 9 6 3 1 备注: 这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试...原创 2018-06-03 11:33:31 · 588 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \-3 9 / / -10 5因为...原创 2018-05-26 14:00:08 · 223 阅读 · 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 说明:如果你可以运用递归和迭代两种方法解决这个问题,会很...原创 2018-05-26 13:29:46 · 476 阅读 · 0 评论 -
LeetCode104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例: 给定二叉树 [3,9,20,null,null,15,7],3/ \ 9 20 / \ 15 7 返回它的最大深度 3 。/** * Definition for a binary tree nod...原创 2018-05-20 13:41:27 · 173 阅读 · 0 评论 -
LeetCode100. 相同的树
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true 示例 2:输入: 1 ...原创 2018-05-20 13:39:16 · 246 阅读 · 0 评论 -
树的定义与性质
树的定义与性质由若干结点和若干条边组成的数据结构。 常用性质: 1. 树可以没有结点,这种情况把树称为空树。 2. 树的层次从根结点开始算起,即根结点为第一层,根结点子树的根结点为第二层,以此类推。 3. 把结点的子树棵数称为结点的度,树中结点的最大的度称为树的度。 4. 由于一条边连接两个结点,且树中不存在环,因此对有n个结点的树,边数一定是n-1. 满足连通、边数等于顶点数-1...原创 2018-04-28 20:17:07 · 4519 阅读 · 0 评论 -
哈夫曼树
编写程序实现构造哈夫曼树,并求解哈夫曼编码#include#includeusing namespace std;///哈夫曼树的存储表示typedef struct{ char data; int weight; int parent,lchild,rchild;}HTNode,*HuffmanTree;typedef char **HuffmanCo原创 2018-03-27 19:30:09 · 417 阅读 · 0 评论 -
111. 二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ \ 9 20 / \ 15 7 返回它的最小深度 2.递归写法:/** * Definition for a binary t...原创 2018-05-24 15:59:26 · 221 阅读 · 0 评论 -
L2-006 树的遍历(25 分)
L2-006 树的遍历(25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(<=30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:...原创 2018-05-29 15:26:01 · 1379 阅读 · 0 评论 -
L2-011 玩转二叉树(25 分)
L2-011 玩转二叉树(25 分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(<=30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该...原创 2018-06-05 15:32:47 · 1265 阅读 · 0 评论 -
L2-012 关于堆的判断(25 分)
L2-012 关于堆的判断(25 分) 将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:“x is the root”:x是根结点;“x and y are siblings”:x和y是兄弟结点;“x is the parent of y”:x是y的父结点;“x is a child of y”:x是y的一个子结点。 输入格式:...原创 2018-07-07 14:55:25 · 3259 阅读 · 3 评论 -
637. 二叉树的层平均值
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.示例 1:输入: 3 / \ 9 20 / \ 15 7输出: [3, 14.5, 11]解释:第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].注意:节点值的范围在32位有符号整数范围内。 分析:题目给定一棵二叉树,要...原创 2018-07-12 16:52:46 · 308 阅读 · 0 评论 -
617. 合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 ...原创 2018-07-11 17:27:05 · 126 阅读 · 0 评论 -
129. 求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 25解释:从根到叶子节点路径 1->2...原创 2018-07-08 14:50:25 · 346 阅读 · 0 评论 -
113. 路径总和 II
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \...原创 2018-07-08 14:43:42 · 695 阅读 · 0 评论