8.6 二叉树----基本操作

来源:互联网 发布:godaddy域名续费好贵 编辑:程序博客网 时间:2024/06/07 07:16

二叉树清理函数          //使用递归处理

void deinit(tree *p_root)//递归函数 
{
if(!(p_root->p_root))//递归出口 
{
return ;  //stop function 
}
deinit(&(p_root->p_root->left));   //left
deinit(&(p_root->p_root->right));//right
printf("delete node %d\n",p_root->p_root->num); 
//see jieguo look caozuo 
free(p_root->p_root);
p_root->p_root=NULL;
}


有序二叉树:

在有序二叉树查找的函数:

动态分配是否成功:3:00.

递归实现树数据的操作:

struct node; //树的结构
typedef struct tree{
struct node *p_root;
}tree;
typedef struct node{
int num;
  tree left;
  tree right;
}node;

算法:

排序算法:冒泡,选择,查找,快速。

查找算法:折半查找。

作业:1、给树的数据结构增加统计节点的个数以及统计树高度的函数

   2、

判定过程最优的二叉树为哈夫曼树,又称最优二叉树

定义哈夫曼树之前先说明几个与哈夫曼树有关的概念:

 

路径: 树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。

 

路径长度:路径上的分枝数目称作路径长度。

 

树的路径长度:从树根到每一个结点的路径长度之和。

 

结点的带权路径长度:在一棵树中,如果其结点上附带有一个权值,通常把该结点的路径长度与该结点上的权值

                                                              之积称为该结点的带权路径长度(weighted path length)

哈弗曼依据这一特点提出了一种构造最优二叉树的方法,其基本思想如下:
 
下面演示了用Huffman算法构造一棵Huffman树的过程: