TAOCP_2.3_树

1. 树

树是一个或多个节点的有限集合T,使得:

a)有一个特别指定的节点,叫做树的根root(T);以及:

b)剩余的节点(排除根)被分划$m \geq 0$个不相交的集合$T_1, ..., T_m$, 而且这些集合的每一个也都是树。树$T_1, ..., T_m$称做这个根的子树。

2. 度

一个节点的子树的个数称做该节点的度。

度数为0的节点称做终(端)节点,或者有时叫做叶。

一个非终节点通常称做一个分支节点。

相对于T,一个节点的级递归地定义为:

根root(T)的级为0,任何其它节点的级相对于包含该节点的root(T)的子树的对应节点的级大于1。

3. 有序树

如果子树$T_1, ..., T_m$在定义b)中的相对顺序重要的话,我们就说该树是有序树;

如果把不把仅仅是节点子树的相对次序不同的两棵树当做不同的树,就说这样的树是有向的,因为考虑的仅仅是节点相对的方向,而不是它们的次序。

除非有明确的说明,本书讨论的所有树都是有序的。

4. 森林

森林是零个或多个不相交的树的集合(通常是一个有序的集合)。表达定义的b)部分的另一种方式是说树的除了根之外的所有节点形成森林。

在抽象的树和森林之间的区别很小。如果删去树的根,我们就有一个森林;反过来,如果在任何森林上增加一个节点,并且把森林中的树当做这个新节点的子树,我们就得到一棵树。因此,关于数据结构的非正式讨论中,树和森林通常几乎是可以互换的。

5. 二叉树

每个节点至多有两个子树的树,称为二叉树;而当只有一棵子树时,我们区分左子树和右子树。更正式地说:

二叉树是节点的有序集合,它或者为空,或者由根和这个根的两个称做左和右子树的不相交的二叉树的元素所组成。

注意:二叉树不是树的特殊情况;它全然是另外一个概念:二叉树可以为空,但树不能。

时间: 2024-10-14 10:15:45

TAOCP_2.3_树的相关文章

FP树(附)

Apriori算法和FPTree算法都是数据挖掘中的关联规则挖掘算法,处理的都是最简单的单层单维布尔关联规则. 转自http://blog.csdn.net/sealyao/article/details/6460578 Apriori算法 Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法.是基于这样的事实:算法使用频繁项集性质的先验知识.Apriori使用一种称作逐层搜索的迭代方法,k-项集用于探索(k+1)-项集.首先,找出频繁1-项集的集合.该集合记作L1.L1用于找频繁2

K-th occurrence(后缀树组+划分树+ST表+RMQ+二分)

2019CCPC网络选拔赛1003 HDU6704 题目大意: T个测试样例.一个长度为N的字符串S,之后Q个[l,r,k],表示一个子串S[l,r],求出第k个该子串的下标.起始坐标为1.不存在输出-1. 数据范围:1≤T≤20,  1≤N≤105,  1≤Q≤105,  1≤l≤r≤N,  1≤k≤N,  |S|=N; 赛后补题.参考题解说后缀树组+划分树+ST表+二分. 比赛的时候只会后缀树组不会划分树,赛后仔细想,觉得后缀数组可以,然而并不,会TLE. 补提的时候先是采用后缀树组+划分树

HDU 6203 ping ping ping [LCA,贪心,DFS序,BIT(树状数组)]

题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=6203] 题意 :给出一棵树,如果(a,b)路径上有坏点,那么(a,b)之间不联通,给出一些不联通的点对,然后判断最少有多少个坏点. 题解 :求每个点对的LCA,然后根据LCA的深度排序.从LCA最深的点对开始,如果a或者b点已经有点被标记了,那么continue,否者标记(a,b)LCA的子树每个顶点加1. #include<Bits/stdc++.h> using namespace std;

HDU 5542 The Battle of Chibi dp+树状数组

题目:http://acm.hdu.edu.cn/showproblem.php?pid=5542 题意:给你n个数,求其中上升子序列长度为m的个数 可以考虑用dp[i][j]表示以a[i]结尾的长度为j的上升子序列有多少 裸的dp是o(n2m) 所以需要优化 我们可以发现dp的第3维是找比它小的数,那么就可以用树状数组来找 这样就可以降低复杂度 #include<iostream> #include<cstdio> #include<cstring> #include

【树4】二叉树的遍历

简介 遍历二叉树就是按照某种顺序,将树中的结点都枚举一遍,且每个结点仅仅访问一次.因为树不是线性的结构,遍历不像线性表那样简单,因此他的遍历需要特点的算法来完成. 从某种角度讲,对二叉树的遍历就是将树形结构转换为线性结构的操作. 二叉树的遍历方法主要有如下几种: 先序遍历:先访问root结点,再先序遍历左子树,再先序遍历右子树. 中序遍历:先中序遍历左子树,再访问root结点,再中序遍历右子树. 后序遍历:先后序遍历左子树,再后序遍历右子树,再访问root结点. 层遍历:从上到下,从左到右,一层

关于左偏树的一些东东

大概所有的预备知识这里都有https://baike.baidu.com/item/%E5%B7%A6%E5%81%8F%E6%A0%91/2181887?fr=aladdin 例题1:洛谷 P3377 [模板]左偏树(可并堆) 383通过 1.2K提交 题目提供者HansBug 站长团 标签 难度提高+/省选- 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 加了路径压缩就WA,路过dal… 左偏树用指针写会MLE吗..… m,n写反了也可以过,数据有… 哪位大神有pbds库

ZJOI 2008 树的统计

ZJOI2008 树的统计 题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身 输入输出格式 输入格式: 输入文件的第一行为一个整数n,表示节点的个数. 接下来n – 1行,每行2个整数

luoguP2590 [ZJOI2008]树的统计 [树链剖分] [TLE的LCT]

题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身 输入输出格式 输入格式: 输入文件的第一行为一个整数n,表示节点的个数. 接下来n – 1行,每行2个整数a和b,表示节点a和节点b之

(POJ 3067) Japan (慢慢熟悉的树状数组)

Japan Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29295   Accepted: 7902 Description Japan plans to welcome the ACM ICPC World Finals and a lot of roads must be built for the venue. Japan is tall island with N cities on the East coas