栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

排序二叉树代码

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

排序二叉树代码

 

#include
// #include
#include
#include
typedef int DataType;
typedef struct BST_node{
       
    DataType data;
    struct BST_node *lchild,*rchild;

}BST_T;

BST_T* Search_BST(BST_T** root,DataType key)
{
     BST_T *p =*root;

     while(p)
     {
        if(p->data==key)  return p;
        p=(key < p->data)?p->lchild:p->rchild;
     }
   return NULL;

}
void Insert_BST(BST_T** T,DataType data)
{

    BST_T *p_bst =(BST_T*)malloc(sizeof(BST_T));

    if(!p_bst) return;

    p_bst->data =data;
    p_bst->lchild=p_bst->rchild=NULL;
    //empty tree
    if((*T)==NULL)
    {
        *T = p_bst;
         return;
    }
    //是否存在,已存在则返回,不插入
    if (Search_BST(T, data) != NULL) return; 
    //insert 
    BST_T* tnode=NULL; BST_T *troot=(*T);

    while(troot)
    {
        tnode = troot;
        troot =(datadata)? troot->lchild:troot->rchild;

    }
    if(data < tnode->data)
       tnode->lchild =p_bst;

    else
       tnode->rchild =p_bst;


}
void CreateBST(BST_T** T,int a[],int n)
{

  int i;
  for(i=0;ilchild);
        //cout << T->data << " ";
        printf("%dt",T->data);
        MidOrderTraverse(T->rchild);
    }
}
void PostOrderTraverse(BST_T* T)
{
    if (T)
    {
        PostOrderTraverse(T->lchild);
        PostOrderTraverse(T->rchild);
        printf("%dt",T->data);
    }
}
void PreOrderTraverse(BST_T* T)
{
    if (T)
    {
        printf("%dt",T->data);
        PreOrderTraverse(T->lchild);
        PreOrderTraverse(T->rchild);
    }
}
void DeleteBSTNode(BST_T** root,DataType data)
{
    
  BST_T *p = *root;
  BST_T *parent =NULL;
  BST_T *s =NULL;
  
  if (!(*root)) return;

  if(p->data == data)
  {
     //删除的是叶子节点
     if(p->lchild==NULL && p->rchild==NULL)

        *root =NULL;
     //只有一个子节点
     else if(!p->rchild&&p->lchild)
        *root =p->lchild;
 
     else if (!p->lchild&&p->rchild)  
        *root =p->rchild;  //为了退出递归

    //左子树右子树都有
     else{
           
        s = p->rchild;
        //删除倒数第二层的节点
        if(!s->lchild)
            s->lchild =p->lchild;
        //删除倒数第二层往上的节点
        else{

            while(s->lchild)
            {
                parent = s;
                s= s->lchild;

            }

            parent->lchild =s->rchild;
            s->lchild =p->lchild;
            s->rchild = p->rchild;
            
        }
        (*root) = s;

     }
       free(p);

  }

  else if(data > p->data)
      DeleteBSTNode(&(p->rchild),data);
  else if(data < p->data)
      DeleteBSTNode(&(p->lchild),data);
     
}
int main()
{
    int arr[] = { 17,12,19,10,15,18,25,8,11,13,16,22};  
    BST_T *root =NULL;
   
    CreateBST(&root,arr,12);
    //printf("nCreate BST: ");

    // printf("nMid order traverse: ");
    // MidOrderTraverse(root);

    printf("npre order traverse: ");
    PreOrderTraverse(root);

    // printf("npost order traverse: ");
    // PostOrderTraverse(root);

    //查找某节点
    BST_T *result = Search_BST(&root, 12);

    printf("查找结果:%dn",result->data);
    //删除二叉排序树中的节点12
    DeleteBSTNode(&root, 8);

    printf("npre order traverse: ");
    PreOrderTraverse(root);
    // printf("npost order traverse: ");
    // PostOrderTraverse(root);
    // printf("n");


}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1035807.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号