数据结构 二叉排序树 操作及实现

#include
#include
#include
#include
using namespace std;
typedef  struct Bitnode
{
    int data;
    struct Bitnode *lchild,*rchild;
} Bitnode,*Bitree;
int Searchtree(Bitree T,int num,Bitree F,Bitree &P)   //在二叉树T种查找元素num  F表示前驱  P表示num元素所在的节点
{
    if(T==NULL)               //未找到该元素
    {
        P=F;                  //p表示num元素应当在的位置的前驱
        return 0;
    }
    else if(T->data==num)
    {
        P=T;
        return 1;
    }
    else if(T->data<=num)
        Searchtree(T->rchild,num,T,P);
    else
        Searchtree(T->lchild,num,T,P);
}
void print_in(Bitree &T)        //中序遍历排序二叉树
{
    if(T!=NULL)
    {
        print_in(T->lchild);
        printf("%d ",T->data);
        print_in(T->rchild);
    }
    return;
}
void insertTree(Bitree &T,int num)  //在二叉排序树T中插入元素NUM
{
    Bitree P,s;
    int flag=Searchtree(T,num,NULL,P);
    if(flag==0)
    {
        s=(Bitree)malloc(sizeof(Bitnode));
        s->data=num;
        s->lchild=NULL;
        s->rchild=NULL;
        if(T==NULL)
            T=s;
        else if(numdata)
            P->lchild=s;
        else
            P->rchild=s;
    }
    return;
}
void deletenode(Bitree &T)  //删除该节点
{
    Bitree q,s;
    if(T->rchild==NULL)
    {
        q=T;
        T=T->lchild;
        free(q);
    }
    else if(T->lchild==NULL)
    {
        q=T;
        T=T->rchild;
        free(q);
    }
    else
    {
        q=T;
        s=q->lchild;
        while(s->rchild)
        {
            q=s;
            s=s->rchild;
        }
        T->data=s->data;
        if(T==q)                            //T=q 表示 while循环没有执行  T的左儿子的右子树没有节点
            q->lchild=s->lchild;
        else
            q->rchild=s->lchild;
        free(s);
    }
    return;
}
void Deletetree(Bitree &T,int num)  //在树种删除元素num
{
    if(T==NULL)
        return;
    if(T->datarchild,num);
    else  if(T->data>num)
        Deletetree(T->lchild,num);
    else                   //找到相同的节点 删除节点操作
    {
     //   cout<<111<

你可能感兴趣的:(算法,▼数据结构,├──基础数据结构)