数据结构8------树(1)

树:

树(Tree)是n(n>=0)个节点的有限集。n=0时称为空树。在任意一棵飞空树中:

(1)有且仅有一个特定的被称为“根”(Root)的结点。

(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、T3、.......Tm,其中每一集合本身又是一棵树,并且称为根的子树(subTree)。

根:A  {B CD}T1{C F G}T2称为A的子树。

对于树的定义还需要强调两点:

(1)n>0时根结点时唯一的,不可能存在多个根结点。

(2)m>0时,子树的个数没有限制,但他们一定是互不相交的。

结点的分类:

度:结点拥有的子树数称为结点的度(Degree)。

扫描二维码关注公众号,回复: 5039933 查看本文章

度为0的结点称为叶结点或终端结点。

度不为0的结点称为非终端结点或分支结点。除根结点外,分支结点也称为内部结点。树的度是树内各结点的度的最大值。

结点之间的关系:

结点的子树的根称为该结点的孩子,该结点称为孩子的双亲。同双亲的孩子结点之间互称为兄弟,结点的祖先是从根到该结点所经分支上的所有结点。已某个结点为根的子树中的任一结点都称为该节点的子孙。

如果将树中各自子树看成从左至右是有次序的,不能互换的,则称为该树为有序树,负责称为无序树。

森林是m(m>0)棵互不相交的树的集合。

线性结构 树结构
第一个数据元素:无前驱 根结点:无双亲,唯一  
最后一个元素:无后继 叶结点:无孩子,可以多个
中间元素:一个前驱一个后继 中间结点:一个双亲多个孩子

树的存储结构:

(1)线性结构存储

(2)链式结构存储

(1)线性结构存储:双亲表示法,孩子表示法、孩子兄弟表示法。

双亲表示法:在每个节点中,附加一个指示器指示双亲结点到链表中的。

data(数据) 双亲所在位置的下标

孩子表示法:每个结点的孩子排列起来,一单链表作为存储结构,则n个结点有n个孩子链表,如果是叶子结点则此单链表为空。然后n个头指针又组成一个线性表,采用顺序存储结构,存放进一个一位数组中。

孩子结点数据结构
所在位置的下标 兄弟的地址

双亲结点数据结构

data(数据)

 第一个孩子的地址

孩子兄弟表示法:任意一棵树,它的结点的第一个孩子如果存在就是唯一的,它的右兄弟如果存在也是唯一的。因此,我们设置两个指针,分别指向该结点的第一个结点和此结点的右兄弟。

data firstChild rightSib

通过这种方式可以将一棵普通的树,转化为二叉树。

猜你喜欢

转载自blog.csdn.net/qq_39038983/article/details/86593216