7.1 树
基本定义
树:由n(n>=0)个结点构成的集合
结点:由数据元素和构造数据元素之间关系的指针组成
结点的度:结点所拥有子树的个数
叶结点:度为0的结点,又称为终端结点
分支节点:度不为0的结点,又称为非终端结点
孩子节点:树中一个结点的子树的根节点
双亲节点:若树中某结点有孩子结点,则这个结点就称为这个结点的孩子节点
兄弟节点:具有相同的双亲结点的结点
树的度:树中所有结点的度的最大值
结点的层次:从根结点到树中某结点所经路径上的分支数
树的深度:树中所有结点的层次的最大值
无序树:一棵树中任意一个结点的各子树从左到右是无序的,通常,树指的是无序树
有序树:一棵树中任意一个结点的各子树从左到右是有序的
森林:m(m>=0)棵树的集合
树的表示方法
1、直观表示法(主要用于直观描述树的逻辑结构)
2、形式化表示法(树的理论描述)
3、凹入表示法(主要用于树的屏幕显示和打印机输出)
结点逐层缩进的表示方法,分为横向凹入表示法和竖向凹入表示法
树的抽象数据类型
数据集合:树的结点集合,每一个结点由数据元素和构造数据元素之间关系的指针组成
操作集合:
树的存储结构
分类:双亲表示法、孩子表示法、双亲孩子表示法和孩子兄弟表示法
1、双亲表示法
双亲表示法:使用指针(仿真指针)表示出每个结点的双亲结点,每一个结点包含两个域(数据域data和指示其双亲结点在数组中下标序号的仿真指针域parent)
优缺点:寻找一个结点的操作实现很方便,但寻找一个结点的孩子节点的操作不方便
2、孩子表示法
孩子表示法:用指针表示出每个结点的孩子节点
优缺点:
7.2 二叉树
7.3 二叉树的设计和实现
7.4 二叉树遍历
7.5 二叉树的打印和查找
7.6 哈夫曼树
7.7 哈弗曼编码