Learning Data Structure_4_树(2)和图(1)

今天杂事较多,学习时间比较分散,所以效率不是很高,看的内容也较少,总体来看,这四天把数据结构的内容看了过半,还剩图、查找和排序三章,争取接下来三天内把数据结构的内容结束掉。下面是今天的学习内容。

树(tree)

1.前序遍历算法:与二叉树的定义一样采用递归形式。

2.中序和后序遍历与前序类似用递归实现;前、中、后是指单次递归算法中访问根节点的顺序

3.已知(前+中)or(后+中)序遍历序列可以唯一确定一颗二叉树;单已知 前+后 则不能。

4.扩展二叉树:将每个结点的空孩子指针引出一个虚结点;扩展二叉树只需一个遍历序列就可确定一棵二叉树。

5.线索:指向前驱和后继的指针;线索链表:加上线索的二叉链表;相应的二叉树称为线索二叉树;标志域:ltag和rtag:表lchild和rchild指针是否指向前驱和后继的布尔标志域

6.结点结构: lchild+ltag+data+rtag+rchild 。

7.中序遍历线索化的递归函数的实现:若某结点的左指针为空,则令p->lchild = pre;若p的前驱pre没有右孩子,则令pre->rchild = p。

8.线索化之后对二叉树进行遍历,相当于操作一个双向链表结构。要在根之前添加一个头结点,与根节点和遍历的最后一个节点通过头结点的左右孩子指针相连。

9.树、森林和二叉树的转换:通过加线去线处理;转化后,树和森林的遍历完全可以套用二叉树的遍历方法实现。

10.赫夫曼树和赫夫曼编码

树的路径长度就是从树根到每一节点的路径长度之和;带权路径长度WPL最小的二叉树叫做赫夫曼树(最优二叉树)。

赫夫曼编码在本科“信息论与编码”课程中学过,因此不缀述。核心思想是符号的使用频率越大,对其编码的长度越短。

图(graph)

1.定义:由顶点的有穷非空集合V 和 边的集合E构成,表示为 G(V,E)。

2.各种数据结构内数据元素之间的关系:线性表的元素是线性关系;树的结点是层次关系;图的顶点(Vertex)是边的(网络状的)关系。

3.各种图的相关术语

无向边(小括号)和有向边(尖括号)(弧arc);无向图和有向图;若A指向B,则A为弧尾,B为弧头;简单图;无向完全图:任意两个顶点之间都有边,n个顶点对应n*(n-1)/2条边;有向完全图:n个顶点对应n*(n-1)条边,稀疏图和稠密图;

网:带权的图;无向图顶点的度:与顶点相连的边的条数,实际的边数是各顶点度数和的一半;有向图顶点的度:入度+出度,实际的弧数=顶点入度数=顶点出度和;路径长度:路径上边或弧的数目;简单路径。

连通图:任意两个顶点都是连通的;连通分量:无向图中极大连通子图;强连通图:有向图中任意的顶点对都存在双向的路径;强连通分量:有向图中的极大强连通子图;连通图的生成树:连通子图,且含全部的n个顶点,恰含n-1条边;有向树:恰有一个顶点入度为0的有向图;其余顶点入度为1;有向图的有向森林:由若干棵有向树构成的有向。

Learning Data Structure_4_树(2)和图(1),布布扣,bubuko.com

时间: 2024-10-07 07:14:00

Learning Data Structure_4_树(2)和图(1)的相关文章

Learning Data Structure_5_图(2)

天气越来越热,看书还得静得下心啊,今天继续图这一章,概念和算法众多,第一遍看以广度优先的形式为主,以后若要用到具体的算法再去翻"算法导论"吧.下面是学习内容和笔记. 图(graph) 1.图的存储结构 邻接矩阵:顶点数组 + 边数组(二元):无向图的边数组为对称矩阵,有向图非对称(行的元素和表顶点的出度和,列对应入度和):网图的边数组中元素由布尔型变为权值. 邻接表:顶点表(data+firstedge) + 边表(adjvex+next):有向图的边表分出边表和入边表:带权的网图,在

Learning Data Structure_3_串和树(1)

今天找兼职继续碰壁中,吃过中饭接着蹲图书馆看数据结构,呵呵,被KMP算法虐了一下午,恨啊,当初上数据结构选修课的时候怎么没好好听呢.下面是今天的学习笔记. 串(string) 1.定义:是由0个或多个字符组成的有限序列,即字符串. 2.串的比较通过字符的编码大小来实现,有ASCII码(7位和8位二进制).Unicode码(16位):字符串的相等. 3.串不是线性表,因为串针对的是字符集,注重子串的查找替换等,线性表针对单个元素的操作. 4.串也分顺序存储结构和链式存储结构 5.朴素的模式匹配算法

Learning Data Structure_7_排序

浑沦吞枣的过了一遍数据结构,今天把最后一章排序的内容结束.大概实现了一个星期看完的想法,当然不是为了求速度,这一次看主要是把各种数据结构做到心中有数,概念清晰,了解各自有哪些经典的算法和算法思路原理.以后若要用到特定的结构和算法再去算法导论中详细研读.下面是今天的学习笔记. 排序(ranking) 1.排序可看成是对线性表的操作:多个关键字排序可转化成单个关键字排序:排序的稳定和不稳定:主要讲内排序,其排序算法主要受3方面影响:时间性能,辅助空间,算法复杂性. 2.按复杂度分:简单算法(冒泡排序

hiho一下 第二周&第四周:从Trie树到Trie图

hihocoder #1014 题目地址:http://hihocoder.com/problemset/problem/1014 hihocoder #1036 题目地址: http://hihocoder.com/problemset/problem/1036 trie图其实就是trie树+KMP #1014trie树 #include<stdio.h> #include <algorithm> #include <cstring> #include <str

Learning Data Structure_1_数据结构绪论和算法

今天回到了杭电,在戴荣学弟的帮助下暂住他的寝室,解决了基本的生活问题,可以多点时间精力开始学习阅读刘志老师给的暑假要求掌握的书籍和知识了. 首先是数据结构,手头上主要是两本教材,一本是严蔚敏等主编的<数据结构(c语言版)>,另一本是程杰编的<大话数据结构>,前者经典严谨,后者通俗有趣,应该是不错的选择.以下是简要的学习内容和笔记. 数据结构绪论 1.数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科. 2.掌握以下概念和术语:数据.数据

【bzoj4276】[ONTAK2015]Bajtman i Okr?g?y Robin 线段树优化建图+费用流

题目描述 有n个强盗,其中第i个强盗会在[a[i],a[i]+1],[a[i]+1,a[i]+2],...,[b[i]-1,b[i]]这么多段长度为1时间中选出一个时间进行抢劫,并计划抢走c[i]元.作为保安,你在每一段长度为1的时间内最多只能制止一个强盗,那么你最多可以挽回多少损失呢? 输入 第一行包含一个正整数n(1<=n<=5000),表示强盗的个数. 接下来n行,每行包含三个正整数a[i],b[i],c[i](1<=a[i]<b[i]<=5000,1<=c[i]

Learning Data Structure_2_线性表、栈和队列

一个人在学校的日子有些寂寞,但是st说男人要耐得住寂寞,做学问也是如此吧.今天看了线性表.栈和队列的内容.以下是学习记录. 线性表(list) 1.定义:0个或多个数据元素的有限序列,元素有且只有一个直接后继和一个直接前驱:基本操作ListLength.GetElem.LocateElem.ListInsert等,并集Union的实现. 2.线性表的顺序存储结构 指用一段地址连续的存储单元依次存储数据元素(c语言中用数组实现改结构):数组长度>=线性表的长度:对于任意位置的存入或取出的所需时间相

【bzoj3073】[Pa2011]Journeys 线段树优化建图+堆优化Dijkstra

题目描述 Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a,b),(c,d)表示,对于任意两个国家x,y,如果a<=x<=b,c<=y<=d,那么在xy之间建造一条道路.Seter保证不会有一个国家与自己之间有道路. Seter好不容易建好了所有道路,他现在在位于P号的首都.Seter想知道P号国家到任意一个国家最少需要经过几条道路.当然,Se

【BZOJ3681】Arietta 树链剖分+可持久化线段树优化建图+网络流

[BZOJ3681]Arietta Description Arietta 的命运与她的妹妹不同,在她的妹妹已经走进学院的时候,她仍然留在山村中.但是她从未停止过和恋人 Velding 的书信往来.一天,她准备去探访他.对着窗外的阳光,临行前她再次弹起了琴.她的琴的发声十分特殊.让我们给一个形式化的定义吧.所有的 n 个音符形成一棵由音符 C ( 1 号节点) 构成的有根树,每一个音符有一个音高 Hi .Arietta 有 m 个力度,第 i 个力度能弹出 Di 节点的子树中,音高在 [Li,R