一、树的定义
树是n个节点的有限集。当n为0时称为空树。在任意一棵非空树中:(1)根节点是唯一的,不可能存在多个根节点(2)子树的个数没有限制,但是它们一定不相交。如下图所示:
二、结点分类
结点拥有的子树树称为结点的度。度为0的结点称为叶节点或终端结点;度不为0的结点称为分支结点。除根节点之外,分支结点也称为内部结点。树的度是树内各节点的度的最大值。如下图所示:
三、树的其它相关概念
结点的层次从根开始定义起,根为第一层,根的孩子为第二层,其双亲在同一层的结点互为堂兄弟。树中结点的最大层次称为树的深度或者高度。如下图所示:
如果将树中结点的各子树看成从左到右是有次序的,不能互换的,则称该树为有序树,否则是无序树。
森林是m棵互不相交的树的集合。
四、树的存储结构
主要有三种双亲表示法、孩子表示法、孩子兄弟表示法,三种都很容易理解
(1)双亲表示法
首先定义根节点的位置设为-1,其它的层按顺序定义,比如说图中BCD位于第二层,parent为0,也就是A的数组下标。
这样我们很容易的通过结点的parent指针找到它的双亲结点,所用的时间复杂度为O(1)。
(2)孩子表示法
图中指针的指向正是表示它的左右子节点。
优化后的双亲孩子表示法
此时既指明了该结点的双亲,同时表示出了它的孩子结点。
(3)孩子兄弟表示法
分别表示data数据域、firstchild指针域(存储该结点的第一个孩子结点的存储地址)、rightsib指针域(存储该结点的右兄弟结点的存储地址)。
接下来我们就要介绍最重要的二叉树。
文章只是作为自己的学习笔记,借鉴了网上的许多案例,如果觉得阔以的话,希望多交流,在此谢过…