树
每天学一点!
时刻保持对知识的热情!
展开
-
572.另一个树的子树
题目描述给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例示例 1:给定的树 s: 3 / \ 4 5 / \1 2给定的树 t: 4 / \1 2返回 true,因为 t 与 ...原创 2019-12-03 10:28:35 · 85 阅读 · 0 评论 -
二叉搜索树的第k个结点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路中序遍历即可。代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode...原创 2019-05-10 19:30:50 · 162 阅读 · 0 评论 -
序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树思路序列化就是将二叉树结点变成一个字符串,反序列化就是根据这个字符串创建二叉树。比如前序遍历得到字符串,再前序创建二叉树。结点与结点之间用 ',’号分隔,子树为空用'#'表示,当然用别的特殊字符表示也行。注意:char与string、int这些转换。代码/*struct TreeNode { in...原创 2019-05-10 15:19:57 · 129 阅读 · 0 评论 -
按之字形顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路层序遍历二叉树只需要一个队列即可。而按照题意,奇数从左到右,偶数层从右到左,则利用一个队列和一个栈来实现。队列先进先出,栈先进后出,所以队列保存奇数层结点,栈保存偶数层结点。由于偶数层是从右到左,所以栈直接从左到右即可。而奇数...原创 2019-05-09 19:09:09 · 90 阅读 · 0 评论 -
二叉树的下一个结点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路以上述二叉树为例子,中序排列结果为: 3 2 4 1 6 5 7。所以3的下一个结点为2,4的下一个结点为1,7的下一个结点为null。当前结点分为以下情况:(1)右子树不为空因为中序遍历,而右子树存在,则当前结点为...原创 2019-03-28 21:20:45 · 79 阅读 · 0 评论 -
平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。描述求树的深度,同时判断左右子树的高度。代码class Solution {public: bool flag; bool IsBalanced_Solution(TreeNode* pRoot) { if (pRoot == nullptr) return true; ...原创 2019-05-09 12:43:25 · 87 阅读 · 0 评论 -
二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路递归。或迭代。代码1/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val...原创 2019-04-28 16:09:01 · 85 阅读 · 0 评论 -
二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \...原创 2019-03-02 08:54:12 · 80 阅读 · 0 评论 -
重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路首先要理解二叉树的4中遍历方式(前、中、后、层)。然后根据前序遍历的特点可知,第一个数必定是root。又根据中序的特点(左子树 -&g...原创 2019-02-25 20:59:49 · 143 阅读 · 0 评论 -
leetcode109. 有序链表转换二叉搜索树
题目描述给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。示例给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / ...原创 2019-08-12 15:14:22 · 252 阅读 · 0 评论 -
leetcode297. 二叉树的序列化与反序列化
题目描述序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例你可以将以下二...原创 2019-08-11 15:14:24 · 125 阅读 · 0 评论 -
leetcode173. 二叉搜索树迭代器
题目描述实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用next()将返回二叉搜索树中的下一个最小的数。示例BSTIterator iterator = new BSTIterator(root);iterator.next(); // 返回 3iterator.next(); // 返回 7iterator.hasNext()...原创 2019-08-11 12:03:22 · 93 阅读 · 0 评论 -
543. 二叉树的直径
题目描述给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例给定二叉树 1 / \ 2 3 / \ 4 5 返回3, 它的长度是路径 [4,2,1,3] 或者[5,2,1,3]。注意:两结点之间...原创 2019-08-11 11:11:33 · 77 阅读 · 0 评论 -
leetcode236. 二叉树的最近公共祖先
题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例例如,给定如下二叉树: root =[3,5,1,6,2,0,8,null,null,7,4]思路这...原创 2019-08-11 10:45:12 · 132 阅读 · 0 评论 -
leetcode235. 二叉搜索树的最近公共祖先
题目描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例例如,给定如下二叉搜索树:root =[6,2,8,0,4,7,9,null,null,3,5]示例 1...原创 2019-08-11 10:24:07 · 95 阅读 · 0 评论 -
230. 二叉搜索树中第K小的元素
题目描述给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例输入: root = [3,1,4,null,2], k = 1 3 / \1 4 \ 2输出: 1思路中序遍历。代码/**...原创 2019-09-06 15:51:26 · 91 阅读 · 0 评论 -
leetcode145. 二叉树的后序遍历
题目描述给定一个二叉树,返回它的后序遍历。示例输入: [1,null,2,3] 1 \ 2 / 3输出: [3,2,1]进阶:递归算法很简单,你可以通过迭代算法完成吗?思路1递归。代码/** * Definition for a binary tree node. * struct Tr...原创 2019-08-10 12:40:49 · 80 阅读 · 0 评论 -
leetcode429. N叉树的层序遍历
题目描述给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。例如,给定一个3叉树:示例返回其层序遍历:[ [1], [3,2,4], [5,6]]说明:树的深度不会超过1000。树的节点总数不会超过5000。思路1迭代,BFS。代码/*// Definitio...原创 2019-08-21 17:43:45 · 135 阅读 · 0 评论 -
leetcode559. N叉树的最大深度
题目描述给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。示例例如,给定一个3叉树:我们应返回其最大深度,3。说明:树的深度不会超过1000。 树的节点总不会超过5000。思路递归求高度。代码/*// Definition for a Node.class Node {pu...原创 2019-08-21 18:02:10 · 107 阅读 · 0 评论 -
小红书2019 树的不同形态
题目描述给定二叉树T(树深度不超过H<=10,深度从1开始,节点个数N<1024,节点编号1~N)的层序和中序遍历,输出T从左向右叶子节点以及树先序和后序遍历序列输入描述输入两行,分别代表层序和中序遍历结果,节点编号按单个空格分开输出描述:依次输出 从左向右叶子节点 ,先序, 后序 遍历 。 节点编号按空格分开示例输入3 5 4 2 6 7 1...原创 2019-08-31 19:03:53 · 493 阅读 · 0 评论 -
快手笔试题 将满二叉树转换为求和树
题目描述给满出二叉树,编写算法将其转化为求和树什么是求和树:二叉树的求和树, 是一颗同样结构的二叉树,其树中的每个节点将包含原始树中的左子树和右子树的和。二叉树: 10 / \ -2 6 / \ / \ 8 ...原创 2019-09-02 16:33:02 · 442 阅读 · 0 评论 -
对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路根据对称二叉树的描述,将前序遍历再细分为:前左序(根结点-左节点-右结点)、前右序(根结点-右结点-左结点)。分别遍历。代码/*struct TreeNode { int val; struct TreeNode *left;...原创 2019-05-09 15:11:24 · 107 阅读 · 0 评论 -
网易2016 二叉树
题目描述有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。给定二叉树的根节点root,请返回所求距离。思路求得每个叶节点的二进制编码。然后进行比较。代码/*struct TreeNode { int val; ...原创 2019-09-02 20:27:51 · 157 阅读 · 0 评论 -
96. 不同的二叉搜索树
题目描述给定一个整数 n,求以1 ...n为节点组成的二叉搜索树有多少种?示例示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 ...原创 2019-09-06 21:09:48 · 94 阅读 · 0 评论 -
450. 删除二叉搜索树中的节点
题目描述给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。示例root = [5,3,6,2,4...原创 2019-09-16 15:36:27 · 121 阅读 · 0 评论 -
257. 二叉树的所有路径
题目描述给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例输入: 1/ \2 3\ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3思路dfs。代码/*...原创 2019-09-18 20:03:25 · 91 阅读 · 0 评论 -
104. 二叉树的最大深度
题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。思路1dfs,只要比较左子树和右子树中最高值,然后加上...原创 2019-08-08 12:24:08 · 98 阅读 · 0 评论 -
leetcode589. N叉树的前序遍历
题目描述给定一个 N 叉树,返回其节点值的前序遍历。例如,给定一个3叉树:返回其前序遍历: [1,3,5,6,2,4]。思路1递归。代码/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node(...原创 2019-08-10 12:18:11 · 170 阅读 · 0 评论 -
226. 翻转二叉树
题目描述翻转一棵二叉树。示例输入: 4 / \ 2 7/ \ / \1 3 6 9输出: 4 / \ 7 2/ \ / \9 6 3 1思路递归。代码/** * Definition for a binary tree node. * s...原创 2019-08-10 10:58:34 · 89 阅读 · 0 评论 -
111. 二叉树的最小深度
题目描述给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.思路dfs分为3种情况:(1)若树为空,则深度为0...原创 2019-08-08 17:55:02 · 104 阅读 · 0 评论 -
110. 平衡二叉树
题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,...原创 2019-08-08 17:17:37 · 88 阅读 · 0 评论 -
leetcode108. 将有序数组转换为二叉搜索树
题目描述将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。示例给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 /...原创 2019-08-08 16:27:03 · 117 阅读 · 0 评论 -
leetcode107. 二叉树的层次遍历 II
题目描述给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)示例例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]...原创 2019-08-08 15:47:21 · 77 阅读 · 0 评论 -
leetcode106. 从中序与后序遍历序列构造二叉树
题目描述根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。示例例如,给出中序遍历 inorder =[9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7思路这题和leetcode105....原创 2019-08-08 15:33:11 · 120 阅读 · 0 评论 -
leetcode105. 从前序与中序遍历序列构造二叉树
题目描述根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。示例例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7思路前序是根左右,中序是左根右。...原创 2019-08-08 14:58:03 · 92 阅读 · 0 评论 -
leetcode103. 二叉树的锯齿形层次遍历
题目描述给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。示例例如:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]...原创 2019-08-08 12:15:03 · 106 阅读 · 0 评论 -
leetcode102. 二叉树的层次遍历
题目描述给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。示例给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]思路如果只是实现二叉树的层序遍历,用队...原创 2019-08-08 11:10:26 · 86 阅读 · 0 评论 -
二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路中序排序。用一个指针保存前一个结点。代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : v...原创 2019-07-22 20:03:40 · 79 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路(1)首先要清晰明白搜索二叉树的定义及其特点。左子树≤根,根≤右子树。而本题中明确指明没有重复数字。(2)二叉树后序遍历的特点:左子树->右子树->根结点。以序列【3 5 4 7 9 8 6】为例子,因为后序遍历...原创 2019-03-09 14:50:06 · 99 阅读 · 0 评论 -
从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路从上往下,从左往右,就是层排序。按照层排序,打印顺序是 1 2 3 4 5 6 7 8 9这道题的关键思想,就是用一个队列来保存各结点。假设,二叉树不为空,那么根结点(root)必定第一个打印,将该结点插入队列。现在队列queue = 【1】。(1)如果队列不为空,打印队列首位置的结点值;(...原创 2019-03-05 10:55:43 · 110 阅读 · 0 评论