这是一个非常小的知识点
二叉树一般在结点会赋值,值叫做权值,权值乘以他到根节点的路径(他到根节点经过几个结点)之和越小越好
所以我们希望将大的数据靠近根节点,小的往下排。
具体操作:选取随机数组里的第一个数,作为根节点
选取第二个数,比根节点小——>左子树,大就右子树(先假设在左边)
去第三个数,与根节点比较,小——>左子树,比左子树小——>左,大,就右边
重点就是每选一个数都要和根节点开始比较!!
这个知识点会用在后来的删除结点,修改结点等地方用到
数组算法:
void creatree(int *tree, int *nodelist, int len)
{
int I,level;
tree[1]=nodelist[1];
for(I=2;I<=len;I++)
{
level=1;
while (tree[level]!=0)
{
if(nodelist[I]<tree[level])
level=level*2;
else
level=level*2+1;
}
tree[level]=nodelist[I];
}
}
链式存储:
b_tree creatree(int *nodelist, int len)
{
int I;
b_tree BT=NULL, p, s;
for(I=0;I<=len;I++)
{
s=(b_tree)malloc(sizeof(b_tree));
s->data=nodelist[I];
s->left=s->right=NULL;
p=BT;
if(p==NULL) BT=s;
else
{
while(p->left!=s && p->right!=s)
{
if(s->data < p->data)
{
if(s->data < p->data)
{
if(p->left !=NULL)
p=p->left;
else
p->left=s;
}
else
{
if(p->right !=NULL)
p=p->right;
else
p->right=s;
}
}
}
}
return(BT);}
下一课开始讲解哈夫曼树,是图的应用部分