题目链接:https://vjudge.net/problem/UVA-1267 首先我们要把这样一棵无根树转换成有根树,那么树根我们可以直接使用$VOD$。 还有一个性质:如果深度为$d$的一个节点并不能被覆盖,那么我们在它的第$k$级的祖先(父亲为第一级)那里建一个$VOD$是最优的,其实很好证 ...
分类:
Web程序 时间:
2020-02-13 22:35:48
阅读次数:
102
/* 结点i的左儿子是2i,右儿子是2i+1 那么显然这是一棵完全二叉树。 由于没有很好直接查询的办法,所以先考虑预处理一下这棵树 根据完全二叉树的性质,sum{size[i]}<=nlogn,所以直接用vector存下结点的所有孩子,自底向上对到子树距离归并排序 这样预处理完后,对于每个询问(A, ...
分类:
编程语言 时间:
2020-02-12 16:52:16
阅读次数:
94
先看一个题目: 题目描述 哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出哈夫曼树的带权路径长度。 输入描述: 输入有多组数据。 每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n ...
分类:
其他好文 时间:
2020-02-12 10:47:32
阅读次数:
226
树转二叉树 左儿子右兄弟 ,即第一个儿子是左二子,第一个兄弟是右儿子,然后按层次按顺序调整每一个即可。 规范做法是三步: 加线: 同一层的兄弟按顺序加线。 去线: 保留第一个儿子,其他儿子连线删掉。 调整层次。 森林转二叉树 先将每个树转成二叉树,然后从第二棵开始,把每一棵二叉树的根都作为 前一棵的 ...
分类:
其他好文 时间:
2020-02-09 16:33:52
阅读次数:
63
字典树的指针写法 1. 注意初始化 2. 注意nullptr 3. 小心指针漂移。 声明 如果不加上初始化,请在声明时加上。 树根 插入 ...
分类:
其他好文 时间:
2020-02-02 00:54:47
阅读次数:
92
题目 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 题解 递归 递归传参:该子树对应的前序遍历和中序遍历(用开始结束指针表示即可) 确定每层:new当前子树根节点,左右孩子分别赋值为递归的返回值 递归结束条件:返回当前子树根节点 使用HashMap记录当前子树根 ...
分类:
其他好文 时间:
2020-02-01 23:01:34
阅读次数:
82
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 N,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N?1 行每行包含两个正整数 x,y,表示 x 结点和 y 结点之间有一条直接连接的边(数据保证可以构成树)。 接下来 M ...
分类:
其他好文 时间:
2020-02-01 21:10:47
阅读次数:
74
本问题可以用动态规划求解。 给定一个有序序列 1 ... n,为了根据序列构建一棵二叉搜索树。我们可以遍历每个数字 i,将该数字作为树根,1 ... (i 1) 序列将成为左子树,(i+1) ... n 序列将成为右子树。于是,我们可以递归地从子序列构建子树。 在上述方法中,由于根各自不同,每棵二叉 ...
分类:
其他好文 时间:
2020-02-01 13:02:07
阅读次数:
82
前言 树的遍历分为: 1.深度优先遍历 2.广度优先遍历 深度优先遍历: 1.前序遍历 2.中序遍历 3.广序遍历 广度优先遍历: 层序遍历 深度优先遍历 如图: 前序遍历 前序遍历的规则为:根节点、左子树、右子树 根据规则,第一个点即为根节点: 第一个为A。 A 有左子树:左子树的第一个节点又为左 ...
分类:
编程语言 时间:
2020-01-31 22:45:09
阅读次数:
95
前言 非线性结构是相当线性结构而言的。 线性结构是一个有序数据元素的集合。 下述来自百度百科: 正文 在非线性结构中常用的:有树和图。 树 树的数据结构是怎么样的? 人们把这种分叉的东西,看起来像树一样,就称作树。其实这一点也不像树,毕竟树根在下面,总之这个称作树的人,可以吹好久的牛了。 树的概念: ...
分类:
编程语言 时间:
2020-01-31 10:48:42
阅读次数:
74