数据结构-树、森林&应用(哈夫曼树)

目录

一、树存储结构

1.1双亲表示法

 1.2孩子表示法

*1.3孩子兄弟表示法

* 二、树,森林、二叉树之间的转化

 三、树和森林的遍历

3.1树

*3.1.1先根遍历

*3.1.2后根遍历

*3.1.3层次遍历

 3.2森林

* 3.2.1先序遍历

 *3.2.2中序遍历

 *等同关系

四、哈夫曼树和哈夫曼编码

4.1哈夫曼树定义

*4.2哈夫曼树构造

*4.3哈夫曼编码

 五、并查集

*5.1 并查集里题​编辑


一、树存储结构

1.1双亲表示法

采用连续的空间来存储每个结点,每个结点设一个伪指针,指示双亲结点(父结点)在数组的位置

#define MAX_TREE_SIZE 100
typedef struct{
    int data;                        //数据元素
    int parent;                      //父结点位置
}PTNode;
typedef struct{
    PTNode nodes[MAX_TREE_SIZE];     //结点
    int n;                           //结点树
}

 1.2孩子表示法

struct CTNode{
    int child;            //孩子结点在数组的位置
    struct CTNode *next;  //下一个孩子
}
typedef struct{
    int data;
    struct CTNode *firstChild;   //第一个孩子
}CTBob;
typedef struct{
    CTBox nodes[MAX_TREE_SIZE];
    int n;
}CTree;

*1.3孩子兄弟表示法

typedef struct CSNode{
    int data;
    struct CSNode *firstchild,*nextsibling;    //第一个孩子和右兄弟指针
}CSNode,*CSTree;

* 二、树,森林、二叉树之间的转化

 

 三、树和森林的遍历

3.1树

*3.1.1先根遍历

和转换成二叉树的先根遍历序列相同

void PreOrder(TreeNode *R){
    if(R!=NULL){
        visit(R);
        while(R下一个子树)
            PreOrder(T);
    }
}

*3.1.2后根遍历

根上述原理相同

void PreOrder(TreeNode *R){
    if(R!=NULL){
        while(R下一个子树)
            PreOrder(T);
        visit(R);
    }
}

*3.1.3层次遍历

根二叉树一样,队列辅助

 3.2森林

* 3.2.1先序遍历

 *3.2.2中序遍历

 *等同关系

二叉树森林
先序先序先序
后续中序中序

四、哈夫曼树和哈夫曼编码

4.1哈夫曼树定义

从根结点到任意结点的路径长度于该结点上的权值乘积,称该结点带权路径长度,

\tiny WPL=\sum_{i=1}^{n}w_il_i,其中\tiny w_i是第i个叶结点所带的权值,\tiny l_i是叶结点到根结点的路径长度

 WPL=36最小,所以是哈夫曼树

*4.2哈夫曼树构造

*4.3哈夫曼编码

 五、并查集

*5.1 并查集里题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值