数据结构全攻略--攻破非线性结构堡垒之树和二叉树(一)
2013-10-04 09:11
330 查看
前两篇博客集中讨论了线性结构,线性结构是基础,同时也是数据结构的至关重要的一部分。学好了线性结构,那非线性结构的很多知识点也都很容易了,因为非线性结构中的很多概念在线性结构中都有体现。学习也是如此,很多知识并不是凭空产生的,而是为了解决实际的问题才有了理论,我们应该把以前学过的知识和现在已有的相联系,或者和日常生活中的事物相联系,这样能够加强我们对新知识的理解程度,另外还能帮助我们记忆。
树和二叉树
刚接触树结构的时候是不是认为二叉树是树的一种,其实树形结构是一种思想,可以形象的看成分层,很多地方都用到了这种思想。
那看看树和二叉树部分都有哪些知识点吧
上图是非线性结构的第一部分树和二叉树,还有一部分的是有关图的将会在这部分结束后讨论。
看了上图就应该知道树形结构的基本概念了吧,它很向现实生活中的树,有枝、叶。上面的图(a)是站在结点的角度介绍的一些有关结点的概念,包括根结点、双亲、孩子和兄弟、叶子结点、内部结点;图(b)是站在树的角度介绍了树的一些基本概念,包括树的度,树的层次。
标准存储结构,这种存储方式类似于单链表,树的每个结点可分为两部分,分别是结点的数据和指向子结点的指针数组。它的存储结构数据类型为:
带逆存储结构,这种存储结构难道类似于线性结构的双链表?bingo,它在标准存储结构基础上又增加了指针,增加的指针用来指向了父结点。数据类型的结构如下:
那它是不是和线性结构一样能够逐个访问树中的结点?
学了线性结构,那我们的非线性结构就很简单了。如果想要逐个获得树中全部结点的信息,就需要使用到树的遍历了。遍历是一种特别重要的概念,它的意思是逐个的读取某个结构中的数据。其中树的遍历分为前序、后序、层次三种。
还是拿我们的ABCDEFG说事,看看下图的几种遍历:
树的前序遍历是一种先根遍历,每次遍历子树时都是先从根结点开始,然后依次从左到右遍历子节点;后序遍历和前序遍历恰好相返,从子节点下手,从左到右最后延伸至根结点;树的层次遍历又称深度遍历,在遍历时按照层级关系,一层层向下递进。
看完了树,是不是感觉很简单,只要学好了线性结构,掌握树结构是很容易的事。学完了树,非线性结构还远没有结束,接下来看看二叉树。
树和二叉树
一、树和二叉树区分开了吗
二叉树是一种特殊的树?答案是正确的,也就是说树的一些性质同样适用于二叉树。虽然答案是正确的,但是我们在理解概念时还是不要把二叉树列入树中的好,因为二叉树和树的结构有着本质的区别。其中最主要的区别是:二叉树中节点的子树需要区分左子树和右子树,即使在结点只有一棵子树的情况下,也要明确指出该子树是左子树还是右子树。另外,二叉树的结点最大度为2,而树中不限制结点的度。刚接触树结构的时候是不是认为二叉树是树的一种,其实树形结构是一种思想,可以形象的看成分层,很多地方都用到了这种思想。
那看看树和二叉树部分都有哪些知识点吧
上图是非线性结构的第一部分树和二叉树,还有一部分的是有关图的将会在这部分结束后讨论。
二、先看看树形结构
树结构是非常重要的非线性结构,它是由有限个结点组成一个具有层次关系的集合。它的形状看起来很像一棵倒挂的树,也就是说它是根朝上,而叶朝下的结构,所以称为“树”。看了上图就应该知道树形结构的基本概念了吧,它很向现实生活中的树,有枝、叶。上面的图(a)是站在结点的角度介绍的一些有关结点的概念,包括根结点、双亲、孩子和兄弟、叶子结点、内部结点;图(b)是站在树的角度介绍了树的一些基本概念,包括树的度,树的层次。
1 从上图中能发现树的一些性质吗?
总结点数n=总度数(所有结点的度数之和)k+1,这个性质其实很简单,它是每个结点的度的总和数,最后还要加上一个根结点。2 它都有哪几种存储结构呢?
树的存储结构有两种,这两中存储方式很简单,只要好好学习了线性结构中链表那部分的知识,这儿是很容易的。树是由结点和边构成,而且在结点中存放了指针的信息,所以按照指针信息的不同,树的存储结构又分为了标准存储结构和带逆存储结构。标准存储结构,这种存储方式类似于单链表,树的每个结点可分为两部分,分别是结点的数据和指向子结点的指针数组。它的存储结构数据类型为:
#define N 5 typedef struct tnode{ char data; /*树结点的数据信息*/ struct tnode *child ; /*树结点的子结点指针*/ }TNODE;/*树结点的数据类型*/
带逆存储结构,这种存储结构难道类似于线性结构的双链表?bingo,它在标准存储结构基础上又增加了指针,增加的指针用来指向了父结点。数据类型的结构如下:
#define N 5 typedef struct rtnode{ char data;/*树的结点数据信息*/ struct rtnode *child ;/*树结点的子结点指针*/ struct rtnode *parent;/*父结点指针*/ }RTNODE;/*树结点的数据类型*/
那它是不是和线性结构一样能够逐个访问树中的结点?
学了线性结构,那我们的非线性结构就很简单了。如果想要逐个获得树中全部结点的信息,就需要使用到树的遍历了。遍历是一种特别重要的概念,它的意思是逐个的读取某个结构中的数据。其中树的遍历分为前序、后序、层次三种。
还是拿我们的ABCDEFG说事,看看下图的几种遍历:
树的前序遍历是一种先根遍历,每次遍历子树时都是先从根结点开始,然后依次从左到右遍历子节点;后序遍历和前序遍历恰好相返,从子节点下手,从左到右最后延伸至根结点;树的层次遍历又称深度遍历,在遍历时按照层级关系,一层层向下递进。
看完了树,是不是感觉很简单,只要学好了线性结构,掌握树结构是很容易的事。学完了树,非线性结构还远没有结束,接下来看看二叉树。
相关文章推荐
- 数据结构全攻略--攻破非线性结构的堡垒之树和二叉树(二)
- 数据结构全攻略--攻破非线性结构的堡垒之哈弗曼树篇
- ※数据结构※→☆非线性结构(tree)☆============二叉树 顺序存储结构(tree binary sequence)(十九)
- ※数据结构※→☆非线性结构(tree)☆============二叉树 顺序存储结构(tree binary sequence)(十九)
- 数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树
- 数据结构(三):非线性逻辑结构-二叉树
- 数据结构--二叉树--获得二叉树的深度和根(顺序结构)
- 数据结构--二叉树--节点的修改(顺序结构,包括二叉树的顺序遍历和打印)
- 非线性结构之二叉树
- 二叉树的概念,二叉树的数据存储结构,二叉树的性质,二叉树的遍历方法数据结构-树的学习(3)
- 【数据结构】二叉树链式结构--遍历二叉树
- 《数据结构》第五章:树和二叉树 知识结构导图——信管1133-09
- 二叉树的存储结构 – 数据结构和算法45
- 数据结构全攻略--线性结构不攻自破之栈和队列
- 数据结构--二叉树--双亲、孩子和兄弟节点的查询(顺序结构)
- 数据结构--二叉树--中序非递归遍历二叉树(链式结构)
- 数据结构-二叉树的存储结构与遍历
- ※数据结构※→☆非线性结构(tree)☆============树结点 链式存储结构(tree node list)(十六)
- ※数据结构※→☆非线性结构(tree)☆============树结点 顺序存储结构(tree node sequence)(十四)
- 数据结构全攻略--线性结构不攻自破之栈和队列