zoukankan      html  css  js  c++  java
  • [C] 二叉排序树

    来源:网络

    #include <stdio.h>
    #include
    <stdlib.h>

    struct nodb
    {
    int data;
    struct nodb *lch,*rch;
    };
    struct nodb *root,*q,*p;

    void insert1(struct nodb *s);

    void creat()
    {
    struct nodb *s;
    int i,n,k;
    printf(
    "n=?");
    scanf(
    "%d",&n);

    for(i=1;i<n;i++)
    {
    printf(
    "k%d=?",i);
    scanf(
    "%d",&k);
    s
    =(struct nodb *)malloc(sizeof(struct nodb));
    s
    ->data=k;s->lch=NULL;s->rch=NULL;
    insert1(s);
    }
    }


    void insert1(struct nodb *s)
    {
    //非递归插入
    struct nodb *p,*q;
    if(root==NULL)
    root
    =s;
    else
    {
    p
    =root;
    while(p!=NULL)
    {
    q
    =p;//当p向子数节点移动时,q记录p的双亲的位置
    if(s->data<p->data)
    p
    =p->lch;
    else
    p
    =p->rch;
    }
    if(s->data<q->data)
    q
    ->lch=s;
    else
    q
    ->rch=s;//当p为空时,q就是可插入的地方
    }
    }

    void print(struct nodb *t)
    {
    if(t!=NULL)
    {
    print(t
    ->lch);
    printf(
    "%6d",t->data);
    print(t
    ->rch);
    }
    }

    void bstsrch(struct nodb*t,int k)
    {
    int flag;
    p
    =NULL;
    q
    =t;
    flag
    =0;
    while((q!=NULL)&&(flag==0))
    {
    if(q->data==k)
    {
    printf(
    "发现 %5d",q->data);
    flag
    =1;
    }
    else if(k<q->data)
    {
    p
    =q;
    q
    =q->lch;
    }
    else
    {
    p
    =q;
    q
    =q->rch;
    }
    }
    if(flag==0)printf("没有发现节点");
    }

    void bstins(struct nodb *t,int k)
    {
    struct nodb *r;
    bstsrch(root,k);
    if(q==NULL)
    {
    r
    =(struct nodb*)malloc(sizeof(struct nodb));
    r
    ->data=k;
    r
    ->lch=NULL;
    r
    ->rch=NULL;
    if(root==NULL)
    root
    =r;
    else if(k<p->data)
    p
    ->lch=r;
    else
    p
    ->rch=r;
    }
    }

    main()
    {
    int n;
    root
    =0;
    creat();
    print(root);
    printf(
    "请出入关键值n=?");
    scanf(
    "%d",&n);
    bstsrch(root,n);
    printf(
    "\n");
    bstins(root,n);
    print(root);
    }

  • 相关阅读:
    打印出从1到最大的n位十进制数
    排序算法--(二)
    排序算法 (-)
    两个栈实现一个队列
    C++ 模板类解析
    根据先序遍历中序遍历重建二叉树
    格式化时间
    用js实现冒泡排序
    接口和抽象类的区别
    解析json
  • 原文地址:https://www.cnblogs.com/hcbin/p/1711407.html
Copyright © 2011-2022 走看看