回 帖 发 新 帖 刷新版面

主题:[讨论]十万火急!请哪位大狭帮帮我修改下!

给定一关键字序列(45,24,53,45,12,24,90),请生成一二叉排序树T,并实现插入一关键字为48的结点.
#include "stdio.h"
#define null 0
typedef int keyType;
typedef struct {
   keyType key;
}ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode * lchild;
struct BiTNode *  rchild;
}BiTNode,*BiTree;
BiTree T;
Creat(int a[])
{
BiTree p;
BiTree q;
int i=0;
T=null;
if(!T)   {
     T=(BiTree)malloc(sizeof(BiTNode));
         T->data.key=a[i];
         i++;
         q=T;
         }
else
     for(i=1;i<7;i++)
     {p=(BiTree)malloc(sizeof(BiTNode));
    p->data.key=a[i];
    q=Search(T,a[i]);
    if(q==0)   continue;
    else  {
              if(q->data.key>a[i])    q->lchild=p;
          else q->rchild=p;
          }
     }
}
Bitree  Search(Bitree tt,KeyType k)
{
if(tt->data.key==k)    return 0;
else if(tt->data.key>k)
           {
           if(tt->lchild==null)     return tt;
           else return Search(tt->lchlid,k);
           }
else if(tt->data.key<k)
           {
             if(tt->lchild==null)   return tt;
             return  Search(tt->rchlid,k);
           }
main()
{
int aa[10]={45,24,53,45,12,24,90};
Creat(aa);
}

回复列表 (共1个回复)

沙发

你看看我帮你修改的代码
运行环境 vc6.0++ sp5 win2000(English)

#include "stdio.h"
#include <stdlib.h> 
typedef struct Tree
{
    struct Tree * lTree;
    struct Tree * rTree;
    int key;
}*pTree;

pTree T;
pTree Insert(pTree h,int key);
void Create(int a[],int len) //the value of len is the structure's length
{    
    T = (pTree)malloc(sizeof(Tree));
    if(T != NULL)
    {
        T->key = a[0];
    }
    T->lTree = NULL;
    T->rTree = NULL;
    pTree p = (pTree)malloc(sizeof(Tree));
    
    


    for(int i = 1;i<len ; i++)
    {
        pTree q = (pTree)malloc(sizeof(Tree));


        q->key = a[i];
        p = Insert(T,q->key);    
        
        if(p == NULL)
            continue;
        else
            {
                if(p->key > q->key) //left
                    {
                        p->lTree = q;
                    }
                else if(p->key < q->key)//right
                    {
                        p->rTree = q;
                    }
            }
        q->lTree = NULL;
        q->rTree = NULL;

    }
    
}
pTree Insert(pTree h,int key)
{
    if(h->key == key) 
        return NULL;
    else if(h->key < key) //right
        {
            
            if(h->rTree == NULL) 
                {
                    return h;
                }    
            else
                {
                    Insert(h->rTree,key);
                }
        }
    else if(h->key > key)//left
        {    
            if(h->lTree == NULL)
                {
                    return h;
                }    
            else
                {
                    Insert(h->lTree,key);
                }
        }

//    return NULL;   //must be do not it

}

void MyPrintf(pTree h)
{
    if(h)
    {
        printf("%d  ",h->key);
        MyPrintf(h->lTree);
        MyPrintf(h->rTree);

    }
}
void main()
{
    int a[] = {45,24,53,12,12,24,90};
    int len =  sizeof(a)/sizeof(int);

    Create(a,len);
    MyPrintf(T);
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册