数据结构第一回合:树

不管是数据结构导论中还是软考中,树都是一个很重要的部分,相对来讲数据结构导论比软考中要讲的相对详细,下面我就结合例题对这部分进行一下整合:

总的来说,结构如下:

概述部分都是一些基本概念和性质的阐释,森林和二叉树都特殊形式的树,判定树和哈弗曼树本质作为树的同时,也可以作为树的应用,运用树(包括二叉树)的基本知识描述和解决一些实际的问题  。下面就依次来看:

一、二叉树

1. 【概况】

二叉树有满,完全、非完全三种情况。所谓满二叉树就是一个子结点都不差,所有的位置该有的都有,如图:

这样一个都不缺的是满的,假设现在该二叉树中缺少了4这一个子结点,那么就是完全二叉树,而如果2、4存在,7或者5的位置空了,那么就由一个完全变成不完全了。

完全二叉树和非完全二叉树的区别就是:有缺失的那一层,子结点的存在是否连续。

【例题分析】(出自《数据结构导论》125页 填空第4题)

已知完全二叉树的第7层有20个结点,则整个完全二叉树的叶子结点个数是______.

        [解析] :因为是一个完全二叉树,所以在树的最后一层一定有缺失,也就是说结点的个数小于2 的(n-1)次方个。而第6层一 定是满的,一共有32 个结点。而根据题意该

树一共有7层,而且根据完全二叉树的性质,这20个结点是第6层的10结点中的子结点数。而第六层剩下的22个结点都是叶子结点。

所以,该树的叶子结点一共有20+22=42个。

2、树和二叉树之间的转换

在这里咱们用图说话,这里说的明白。

                    

1)先将树上所有的兄弟进行连接,得到原图右边的图:

2)再保留每一层的兄弟结点中的第一个作为该层的左子树结点,断开C、D与根结点的连线,直接将B、C、D作为一条线,以B为中心顺时针向旋转45度角,这样就得到下面的图:

其实可以这样归结:当所有的兄弟结点进行连线以后,每一层的所有兄弟结点中左边的第一个都作为所有兄弟结点的父结点,其他的兄弟结点保持队形,以该结点为中心进行旋转,这样就得出最终的二叉树。

二、森林

森林可以看作实实在在的树的虚拟化,也是多棵树组成的。这里知识点主要是和二叉树之间的转换

森林和二叉树之间的转换实际上是对树和二叉树之间转换的一种扩展,当将各个树转换为各自对应的二叉树后,将所有的根结点作为兄弟进行连接,而实现二叉树到森林的转换就是一个逆过程,这里就不再赘述。

这本数据结构第一遍看的挺乱,听难的,翻开一看不是图就是字母,顿时感觉全世界都被这两个东西充斥了。但终究“眼是狗熊,手是英雄”,所以在学习的同时我总结了数据结构的一点学习技巧:

1.实例化

“此实例化非彼实例化”,这里主要是融入生活,用生活中常见的熟悉的事物来代替或者是帮助理解这些抽象的,空旷的理论结构。

2.手脑并用

这门课中很多知识点都需要另外的思路图来辅助理解,比如树、图、或者指针的指向。这就要求我们手脑并用,用纸上的图来帮我们理解和解决。

3.沉心

面对那些庞杂的专业名词,丰富的树图都不要畏惧,免得自己心沉。为了不让自己心沉就必须沉心,要是能闹明白这两个词,那你就"沉心"了:静下心仔细想想好好理理,其实问题都不是问题。

这门数据结构就是一个纸猫,因为它连老虎也不算,大家加油!

时间: 2024-10-11 12:33:30

数据结构第一回合:树的相关文章

《数据结构》线段树入门(二)

今天继续介绍——线段树之延迟标记 接上期<数据结构>线段树入门(一):http://www.cnblogs.com/shadowland/p/5870339.html 在上期介绍了线段树的最基本内容(线段树单点修改,区间查询),这次将介绍:区间修改,区间查询. Question: 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述: 第一行一个正整数n,接下来n行n个整数,再接下来一个正整数Q,每行表示操作的个数,如果第一数是1,后接3个正

可持久化数据结构之主席树

转自:http://finaltheory.info/?p=249 HomeACM可持久化数据结构之主席树 06十2013 可持久化数据结构之主席树 Written by FinalTheory on. Posted in ACM 引言 首先引入CLJ论文中的定义: 所谓的“持久化数据结构”,就是保存这个数据结构的所有历史版本,同时利用它们之间的共用数据减少时间和空间的消耗. 本文主要讨论两种可持久化线段树的算法思想.具体实现以及编码技巧. 核心思想 可持久化线段树是利用函数式编程的思想,对记录

《ACM/ICPC 算法训练教程》读书笔记 之 数据结构(线段树详解)

依然延续第一篇读书笔记,这一篇是基于<ACM/ICPC 算法训练教程>上关于线段树的讲解的总结和修改(这本书在线段树这里Error非常多),但是总体来说这本书关于具体算法的讲解和案例都是不错的. 线段树简介 这是一种二叉搜索树,类似于区间树,是一种描述线段的树形数据结构,也是ACMer必学的一种数据结构,主要用于查询对一段数据的处理和存储查询,对时间度的优化也是较为明显的,优化后的时间复杂为O(logN).此外,线段树还可以拓展为点树,ZWK线段树等等,与此类似的还有树状数组等等. 例如:要将

【经典数据结构】B树与B+树

本文转载自:http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据.对其进行排序并允许以O(log n)的时间复杂度运行进行查找.顺序读取.插入和删除的数据结构.B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树.与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作.B-tree算法减少定位记录时

数据结构之AVL树

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 在前面的博文中,我们已经介绍了数据结构之二分查找树的相关知识,二分查找的提出主要是为了提高数据的查找效率.同一个元素集合可以对应不同的二分查找树BST,二分查找树的形态依赖于元素的插入顺序.同时我们也已经知道,如果将一个有序的数据集依次插入到二查找树中,此时二分查找树将退化为线性表,此时查找的时间复杂度为o(n).为了防止这一问题的出现,便有了平衡二叉树的存在价值.平衡二叉树从根本上将是为了防止出现斜二叉树的出现,从而进一步提高元素的查找效率,

数据结构第一章

证明数据结构分析中的结论的两个常用的方法时归纳法和反证法 归纳法:第一步是证明基准情形,就是确定定理对于某个小的值的正确性,(这一步几乎是很简单的 第二部,进行归纳假设,一般来说,这意味着假设定理对直到某个有限数k的所有的情况都成立的,然后使用这个假设证明定理对于下一个值也是成立的. 反证法:通过假设定理不成立,然后证明该假设导致某一个已知性质不成立,从而说明原假设是错误的. 反证法和归纳法不同处,归纳发从基础出发,反证法从结论出发. 什么是递归:当一个函数用他自己来定义时就称为是递归. 不是所

【数据结构】Trie树

1.Trie树简介 Trie树,又称字典树.前缀树,被用于信息检索(information retrieval)的数据结构.Trie一词便来自于单词retrieval.基本思想:用字符串的公共前缀降低查询时间.比如,在最优的查询二叉树中查询关键字的时间复杂度为M * log N,M是字符串最大长度,N为字符串数量:而用Trie树时,只需O(M)时间. [1] 中给出一个简单Trie树例子,蓝色表示一个单词结尾:该Trie树存储的单词为the, their, there, a, any, answ

D&amp;F学数据结构系列——B树(B-树和B+树)介绍

B树 定义:一棵B树T是具有如下性质的有根树: 1)每个节点X有以下域: a)n[x],当前存储在X节点中的关键字数, b)n[x]个关键字本身,以非降序存放,因此key1[x]<=key2[x]<=...<=keyn[x][x], c)leaf[x],是一个布尔值,如果x是叶子的话,则它为TRUE,如果x为一个内节点,则为FALSE. 2)每个内节点包含n[x]+1个指向其子女的指针c1[x],c2[x],...,cn[x]+1[x].叶节点没有子女,故它们的ci域无意义. 3)各关键

【经典数据结构】B树与B+树(转)

本文转载自:http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html 维基百科对B树的定义为"在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据.对其进行排序并允许以O(log n)的时间复杂度运行进行查找.顺序读取.插入和删除的数据结构.B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树.与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作.B-tree算法减少定位记录时