数据结构全攻略--攻破非线性结构堡垒之树和二叉树(一)

       前两篇博客集中讨论了线性结构,线性结构是基础,同时也是数据结构的至关重要的一部分。学好了线性结构,那非线性结构的很多知识点也都很容易了,因为非线性结构中的很多概念在线性结构中都有体现。学习也是如此,很多知识并不是凭空产生的,而是为了解决实际的问题才有了理论,我们应该把以前学过的知识和现在已有的相联系,或者和日常生活中的事物相联系,这样能够加强我们对新知识的理解程度,另外还能帮助我们记忆。

树和二叉树


一、树和二叉树区分开了吗


       二叉树是一种特殊的树?答案是正确的,也就是说树的一些性质同样适用于二叉树。虽然答案是正确的,但是我们在理解概念时还是不要把二叉树列入树中的好,因为二叉树和树的结构有着本质的区别。其中最主要的区别是:二叉树中节点的子树需要区分左子树和右子树,即使在结点只有一棵子树的情况下,也要明确指出该子树是左子树还是右子树。另外,二叉树的结点最大度为2,而树中不限制结点的度。

 

       刚接触树结构的时候是不是认为二叉树是树的一种,其实树形结构是一种思想,可以形象的看成分层,很多地方都用到了这种思想。

 那看看树和二叉树部分都有哪些知识点吧

 

上图是非线性结构的第一部分树和二叉树,还有一部分的是有关图的将会在这部分结束后讨论。


二、先看看树形结构


      树结构是非常重要的非线性结构,它是由有限个结点组成一个具有层次关系的集合。它的形状看起来很像一棵倒挂的树,也就是说它是根朝上,而叶朝下的结构,所以称为“树”。

      看了上图就应该知道树形结构的基本概念了吧,它很向现实生活中的树,有枝、叶。上面的图(a)是站在结点的角度介绍的一些有关结点的概念,包括根结点、双亲、孩子和兄弟、叶子结点、内部结点;图(b)是站在树的角度介绍了树的一些基本概念,包括树的度,树的层次。


 1 从上图中能发现树的一些性质吗?


       总结点数n=总度数(所有结点的度数之和)k+1,这个性质其实很简单,它是每个结点的度的总和数,最后还要加上一个根结点。


 2 它都有哪几种存储结构呢?


       树的存储结构有两种,这两中存储方式很简单,只要好好学习了线性结构中链表那部分的知识,这儿是很容易的。树是由结点和边构成,而且在结点中存放了指针的信息,所以按照指针信息的不同,树的存储结构又分为了标准存储结构带逆存储结构

       标准存储结构,这种存储方式类似于单链表,树的每个结点可分为两部分,分别是结点的数据和指向子结点的指针数组。它的存储结构数据类型为:

#define N 5
typedef struct tnode{
	char data;   /*树结点的数据信息*/
	struct tnode *child[N];  /*树结点的子结点指针*/
}TNODE;/*树结点的数据类型*/

      带逆存储结构,这种存储结构难道类似于线性结构的双链表?bingo,它在标准存储结构基础上又增加了指针,增加的指针用来指向了父结点。数据类型的结构如下:

#define N 5
typedef struct rtnode{
	char data;/*树的结点数据信息*/
	struct rtnode *child[N];/*树结点的子结点指针*/
	struct rtnode *parent;/*父结点指针*/
}RTNODE;/*树结点的数据类型*/


 

       那它是不是和线性结构一样能够逐个访问树中的结点?

       学了线性结构,那我们的非线性结构就很简单了。如果想要逐个获得树中全部结点的信息,就需要使用到树的遍历了。遍历是一种特别重要的概念,它的意思是逐个的读取某个结构中的数据。其中树的遍历分为前序、后序、层次三种。

     还是拿我们的ABCDEFG说事,看看下图的几种遍历:

       树的前序遍历是一种先根遍历,每次遍历子树时都是先从根结点开始,然后依次从左到右遍历子节点;后序遍历和前序遍历恰好相返,从子节点下手,从左到右最后延伸至根结点;树的层次遍历又称深度遍历,在遍历时按照层级关系,一层层向下递进。

        看完了树,是不是感觉很简单,只要学好了线性结构,掌握树结构是很容易的事。学完了树,非线性结构还远没有结束,接下来看看二叉树

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值