用一组连续的存储空间来存储树的节点,同时在每个节点中附加一个指示器(整数域),用以指示双亲结点的位置(下标值)。
- #define MAX_TREE_SIZE 100//树中最多节点数
- typedef struct
- {
- ElemType data;//数据元素
- int parent;
- }PTNode;
- typedef struct{
- PTNode nodes[MAX_TREE_SIZE];
- int n;//节点数
- }PTree;
- struct CTNode{
- int child;//孩子节点在数组中的位置
- struct CTNode *next;//下一个孩子
- };
- typedef struct{
- ElemType data;
- struct CTNode *firstChild;//第一个孩子
- }CTBox;
- typedef struct{
- CTBox nodes[MAX_TREE_SIZE];
- int n,r;//节点数和根的位置
- }CTree;
- typedef struct CSNode{
- ElemType data;
- struct CSNode *firstchild,*nextsibling;//第一个孩子和右兄弟指针
- }CSNode,*CSTree;
若树非空,先访问根节点,再依次对每颗子树进行先根遍历。
- //树的先根遍历
- void PreOrder(TreeNode *R){
- if(R!=NULL){
- visit(R);//访问根节点
- while(R还有下一个子树T)
- PreOrder(T);
- }
- }
-
- //树的先根遍历
- void PostOrder(TreeNode *R){
- if(R!=NULL){
-
- while(R还有下一个子树T)
- PostOrder(T);
- visit(R);//访问根节点
- }
- }
- 节点的权:有某种现实含义的数值(如:表示节点的重要性等)
- 节点的带权路径长度:从树的根到该节点的路径长度(经过的边数)与该节点上权值的乘积。
- 树的带权路径长度:树中所有叶节点的带权路径长度之和。(WPL)
- WPL最小的为哈夫曼树

- 可变长度编码:允许对不同字符用不等长的二进制表示
- 前缀编码:若没有一个编码是另一个编码的前缀,则称这样的编码前缀编码