
二叉树
ln2037
用心雕琢我的艺术品。
展开
-
LeetCode 109. 有序链表转换二叉搜索树 【递归】
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5把有序链表转换成二叉搜索树。有两种写法。1.把链表转换成数组,根据数组转化成二叉原创 2021-06-18 21:06:09 · 160 阅读 · 0 评论 -
LeetCode 437. 路径总和 III【前缀和 + DFS】
给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \5 -3/ \ 3 2 11/ \ 3 -2 1返回 3。和等原创 2021-01-31 22:01:31 · 167 阅读 · 0 评论 -
LeetCode 538. 把二叉搜索树转换为累加树 【递归】
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。注意:本题和 1038: https://leetcode-cn.com/problems/binary-search-tree-to-greater-sum-tr原创 2021-01-19 19:11:56 · 74 阅读 · 0 评论 -
LeetCode 236 二叉树的最近公共祖先【递归】
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节点 1原创 2021-01-17 22:08:24 · 99 阅读 · 0 评论 -
LeetCode 124. 二叉树中的最大路径和【DFS】
给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入:[1,2,3] 1 / \ 2 3输出:6示例 2:输入:[-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7输出:42从根结点开始搜索,分别找出当前节点的左右子树最大路径和再更新就行了。/** * Defi原创 2020-12-18 19:29:54 · 146 阅读 · 1 评论 -
剑指 Offer 37. 序列化二叉树 【二叉树 + BFS】
请实现两个函数,分别用来序列化和反序列化二叉树。示例:你可以将以下二叉树: 1 / \2 3 / \ 4 5序列化为 “[1,2,3,null,null,4,5]”题目描述的不是太清楚,,序列化后的并不是完全二叉树,直接广搜就行了,末尾多余的null也不用删除。这种输入输出格式真是,不知道说什么好了。/** * Definition for a binary tree node. * struct TreeNode { * int val; *原创 2020-12-13 18:05:28 · 90 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树 【二叉树 + 递归】
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \9 20 / \ 15 7限制:0 <= 节点个数 <= 5000/** * Definition for a binary tree node. * struct TreeNode { *原创 2020-12-13 18:00:51 · 93 阅读 · 0 评论 -
L2-004 这是二叉搜索树吗? (25分) 【二叉树】
一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,其左子树中所有结点的键值小于该结点的键值;其右子树中所有结点的键值大于等于该结点的键值;其左右子树都是二叉搜索树。所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。输入格式:输入的第一行给出正整数 N(≤1000)。随后一行给出 N 个整数键值,其间以空格分隔。输出格式:如果输入序列是对一棵二叉搜索树或其镜像进原创 2020-10-13 20:41:25 · 552 阅读 · 2 评论 -
2019年蓝桥杯C++省赛B组 【G:完全二叉树的权值】 【二叉树】
题目描述给定一棵包含N 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是A1, A2, AN,如下图所示:现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。注:根的深度是1。输入第一行包含一个整数N。第二行包含N 个整数A1, A2, AN对于所有评测用例,1<=N<=100000, -100000<=Ai<=100000。输出输出一个整数代表答案。原创 2020-10-13 18:56:03 · 172 阅读 · 0 评论 -
L2-006 树的遍历 (25分) 【二叉树 + BFS】
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:4 1 6 3 5 7 2#include <iostream>#includ原创 2020-10-11 12:54:50 · 316 阅读 · 0 评论 -
P3884 [JLOI2009]二叉树问题 【二叉树】
题目描述如下图所示的一棵二叉树的深度、宽度及结点间距离分别为:深度:4 宽度:4(同一层最多结点个数)结点间距离: ⑧→⑥为8 (3×2+2=8)⑥→⑦为3 (1×2+1=3)注:结点间距离的定义:由结点向根方向(上行方向)时的边数×2,与由根向叶结点方向(下行方向)时的边数之和。输入格式输入文件第一行为一个整数n(1≤n≤100),表示二叉树结点个数。接下来的n-1行,表示从结点x到结点y(约定根结点为1),最后一行两个整数u、v,表示求从结点u到结点v的距离。输出格式三个数,每个数占原创 2020-10-03 18:09:12 · 464 阅读 · 0 评论 -
P1229 遍历问题【二叉树】
题目描述我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序遍历,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树:所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同。输入格式输A数据共两行,第一行表示该二叉树的前序遍历结果s1,第二行表示该二叉树的后序遍历结果s2。输出格式输出可能的中序遍历序列的总数,结果不超原创 2020-10-03 18:06:44 · 407 阅读 · 0 评论 -
P4913 【深基16.例3】二叉树深度 【二叉树】
题目描述给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 111),如果是叶子节点,则输入0 0。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。最多有 10610^6106 个结点。输入格式无输出格式无输入输出样例输入 #172 73 64 50 00 00 00 0输出 #14#include <iostream>#include <algorithm>#include <cstring&原创 2020-10-02 18:04:08 · 441 阅读 · 1 评论 -
P1827 [USACO3.4]美国血统 American Heritage 【二叉树】
题目描述农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号。每一头奶牛的姓名被译为一个唯一的字母。(你可能已经知道你可以在知道树的两 种遍历以后可以经常地重建这棵树。)显然,这里的树不会有多于 26 个的顶点。 这是在样例输入和 样例输出中的树的图形表达原创 2020-10-02 18:02:52 · 1007 阅读 · 2 评论