预备知识: 路径:从树中一个结点到另一个结点之间的通路,路径上的分支数目成为路径长度; 树的路径长度:从树根到每一个叶子之间的路径长度之和; 结点的带权路径长度:从该结点到树根之间的路径长度与该结点权值的乘积; 树的带权路径长度:所有叶子结点的带权路径长度之和; 结构相同的任意两颗二叉树,...
分类:
其他好文 时间:
2015-03-04 12:53:28
阅读次数:
114
这一章要讲的数据结构基本以实用为主。 12.1 自顶而下的伸展树 一些定义 展开:对于树的操作,叶结点X被插入之后,经过旋转使X成为新的树根。 摊还时间:在摊还分析中的一个概念,就是求一个操作的所有情况的平均时间。和O()的时间不同,后者体现的是最糟糕的情况下程序完成所要花费的时间。 P345之中,...
分类:
编程语言 时间:
2015-02-21 15:28:41
阅读次数:
164
问题描述:已知人名构成的父子关系树(或者森林),对于给定的两个人名name1和name2,求其最近公共祖先。题目保证人名不重复。分析:利用C++ STL中的map和set容器可以很方便的实现。用map容器存储父子关系。对于每一个询问,先将从name1开始到树根的路径上的所有人名放入一个set容器,然...
分类:
其他好文 时间:
2015-02-20 18:36:15
阅读次数:
164
依旧是《训练指南》上的一道例题。书上讲的比较抽象,下面就把解法具体一下。因为涉及到父子关系,因此自然而然可以将n个节点构造成一棵树,最后将形成一个森林。接下来将使用递归的手法。设f(i)是以节点i为树根的子树,节点i有儿子c1,c2,c3....cj共j棵子树。s[i]为树根为i的子树包含的节点数。如果分别先给各个子树内部排序,那么毫无疑问,
共有f(c1)*f(c2)*f(c3)....*f(...
分类:
其他好文 时间:
2015-02-19 18:40:24
阅读次数:
267
二叉查找树【题目描述】已知一棵特殊的二叉查找树。根据定义,该二叉查找树中每个结点的数据值都比它左儿子结点的数据值大,而比它右儿子结点的数据值小。另一方面,这棵查找树中每个结点都有一个权值,每个结点的权值都比它的儿子结点...
分类:
其他好文 时间:
2015-02-10 13:14:23
阅读次数:
716
根据输入的各个叶节点的权值,构建一棵最优树,根据最小带全路径,确定由0,1组成的哈弗曼编码。
分类:
编程语言 时间:
2015-02-08 20:42:38
阅读次数:
166
胖树架构下,网络带宽不收敛 传统的树形网络拓扑中,带宽是逐层收敛的,树根处的网络带宽要远小于各个叶子处所有带宽的总和。 而胖树网络则更像是真实的树,越到树根,枝干越粗,即:从叶子到树根,网络带宽不收敛。这是胖树架构能够支撑无阻塞网络的基础。 图2 胖树网络和传统网络的逻辑拓扑比较 如上图所示...
分类:
其他好文 时间:
2015-02-03 12:55:25
阅读次数:
343
树的定义:树( t r e e) t 是一个非空的有限元素的集合,其中一个元素为根( r o o t),余下的元素(如果有的话)组成 t 的子树( s u b t r e e)。树中层次最高的元素为根,其下一集的元素是余下元素所构成子树的根。树的另一常用术语为级(level)。指定树根的级为1。元素...
分类:
其他好文 时间:
2015-01-27 18:06:06
阅读次数:
251
题意:给定一棵树,查询时给定两个点,求出两个点的距离。
暴力做肯定超时的。我的做法是采用lca(最近公共祖先)的离线算法,即tarjan算法(据说Tarjan提出了很多算法,可能还有很多tarjan算法),算法里用到了并查集。在输入完所有查询之后,在求出答案。tarjan算法的做法是:一开始vis数组初始化为0,从树根开始递归往下对点进行染色,刚到一个点的时候将vis取为-1,在继续递归...
分类:
编程语言 时间:
2015-01-24 09:02:19
阅读次数:
260
有如下的源代码树:
根目录
|---makefile
|----|include|
| |___myutil.h
|___|src|
|----myutil.c
|__main.c
各文件内容如下:
main.c:
#include
#include "myutil.h"
int main(void) {...
分类:
其他好文 时间:
2015-01-22 23:25:03
阅读次数:
288