• 二叉排序树的建立


    二叉排序树是一种左子树的值小于根,而右子树的值大于根的的一棵树,通过中序遍历可以得到一个有序的序列= =
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    typedef struct node
    {
        int data;
        struct node *left,*right;
    }binode ,*bitree;
    bool find(bitree T,int k,bitree f,bitree &p)//查找函数,在T树找查找k是否存在,f表示T的双亲节点,p用来指向查找路径中的最后一个节点 
    {
        if(T==NULL)
        {
            p=f;
            return false;
        }
        else if(k==T->data)
        {
            p=T;
            return true;
        }
        else if(k<T->data)
        return find(T->left,k,T,p);
        else
        return find(T->right,k,T,p);
    }
    int insert(bitree &T,int k) 
    {
        bitree s,p;
        if(!find(T,k,NULL,p))//查找k是否在树中存在 
        {
            s=(bitree)malloc(sizeof(binode));
            s->data=k;
            s->left=s->right=NULL;
            if(p==NULL)//若p==NULL,则说明现在的树是一颗空树,说明s为根节点 
            T=s;
            else if(k<p->data)//k<p->data说明s节点应该放在p的左子树 ,反之则放在右子树 
            p->left=s;
            else
            p->right=s;
           return 0;
        }
        return 1;
    }
    void visit(bitree T)
    {
     if(T!=NULL)
     {
      printf("%d ",T->data);
     }
    }
    void midvisit(bitree T)
    {
     if(T!=NULL)
     {
      midvisit(T->left);
    
      visit(T);
    
      midvisit(T->right);
     }
    }
    int main()
    {
        int n,k,i;
        scanf("%d",&n);
        bitree T;
        T=NULL;
        for(i=0;i<n;i++)
        {
            scanf("%d",&k);
            insert(T,k); 
        }
        midvisit(T);
        return 0;
    }
  • 相关阅读:
    Go 环境变量相关操作
    Go命令行参数解析flag包
    go sync.once用法
    使用go语言编写IOS和Android程序
    go map的使用
    go runtime.Gosched()的作用分析
    go中的读写锁RWMutex
    go互斥锁Mutex
    go import使用及. _的作用解析
    利用channel在goroutins之间控制同步和传递数据
  • 原文地址:https://www.cnblogs.com/NaCl/p/9580158.html
Copyright © 2020-2023  润新知