【ShawnZhang】带你看数据结构——第十课:二叉排序树

这是一个非常小的知识点

二叉树一般在结点会赋值,值叫做权值,权值乘以他到根节点的路径(他到根节点经过几个结点)之和越小越好

所以我们希望将大的数据靠近根节点,小的往下排。

具体操作:选取随机数组里的第一个数,作为根节点

选取第二个数,比根节点小——>左子树,大就右子树(先假设在左边)

去第三个数,与根节点比较,小——>左子树,比左子树小——>左,大,就右边

重点就是每选一个数都要和根节点开始比较!!

这个知识点会用在后来的删除结点,修改结点等地方用到

数组算法:

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);}  

下一课开始讲解哈夫曼树,是图的应用部分


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值