数据结构的学习之路(三)--树

来源:互联网 发布:中国海外间谍知乎 编辑:程序博客网 时间:2024/04/29 12:02

1.树的定义

树是n(n>=0)个节点的有限集。n=0时称为空树。在任意一颗非空树中:有且仅有一个特定的节点称为根的节点;当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2,……,Tm,其中每一个集合本身又是一颗树,并且称为根的子树。

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

2.树的存储结构

双亲表示法:在每个节点中,附设一个指示器指示其双亲节点在数组中的位置。

孩子表示法:每个节点有多个指针域,其中每个执政指向一颗子树的根节点,把这种表示方法叫做多重链表表示法。

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

3.二叉树的存储结构

顺序存储结构一般只用于完全二叉树。

链式存储结构,二叉链表:二叉树没个基点最多有两个孩子,所以他设计一个数据域和两个指针域是比较自然的想法。如果有需要,还可以再增加一个指向其双亲的指针域,那样就称为三叉链表了。

4.遍历二叉树

前序遍历,中序遍历,后序遍历,层序遍历

线索二叉树:把这种指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索链表。对二叉树以莫中次序遍历使其变为线索二叉树的过程称做是线索化。线索化的过程就是在遍历的过程中修改空指针的过程。

0 0