zoukankan      html  css  js  c++  java
  • 二叉搜索树

    /*
    b本树较弱 支持插入+查询(删除太麻烦0.0)
    复杂度
    对于随机数据O(n*logn)
    特殊的 如果一条链下来  O(n*n)
    (升级版:平衡树. ) 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 100010
    using namespace std;
    struct node
    {
        int lch;
        int rch;
        int val;
    }tree[maxn];
    int n,m,topt;
    void Add_tree(int &now,int val)//插入1 & 可以改变上一层 tree[now].lch,的值 
    {
        if(!now)
          {
              now=++topt;
              tree[now].val=val;
              return ;
          }
        if(val<tree[now].val)Add_tree(tree[now].lch,val);
        if(val>=tree[now].val)Add_tree(tree[now].rch,val);
    }
    /*void Add_tree2(int val)//插入2
    {
        if(topt==0)
          {
              topt++;
              tree[1].val=val;
              return ;
          }
        int now=1;
        while(1)
          {
              if(val<tree[now].val)
                {
                  if(tree[now].lch)
                  {
                      now=tree[now].lch;
                      continue;
                  }
                else 
                  {
                      tree[now].lch=++topt;
                      tree[topt].val=val;
                      return;
                  }
              }
            else 
              {
                  if(tree[now].rch)
                  {
                      now=tree[now].rch;
                      continue;
                  }
                else 
                  {
                      tree[now].rch=++topt;
                      tree[topt].val=val;
                      return;
                  }
              }
          }
    }*/
    int Find_tree(int val)
    {
        int now=1;
        while(1)
          {
              if(val==tree[now].val)return 1;
            if(tree[now].lch==0&&tree[now].rch==0)
                return 2;
              if(val<tree[now].val)
                {
                    if(tree[now].lch)
                      {
                          now=tree[now].lch;
                          continue;
                  }
                else return 2;
              }
            if(val>tree[now].val)
                {
                    if(tree[now].rch)
                      {
                          now=tree[now].rch;
                          continue;
                  }
                else return 2;
              }
          }
    }
    int main()
    {
        scanf("%d",&n);
        int x,y,root=0;
        for(int i=1;i<=n;i++)
          {
              scanf("%d%d",&x,&y);
              if(x==0)Add_tree(root,y);
              if(x==1)Delete_tree(y);
              if(x==2)printf("%d ",y,Find_tree(y));
          }
        return 0;
    }
  • 相关阅读:
    线程安全
    Kafka分区原理图
    Zookeeper02
    Zookeeper01
    kafka01
    20170623_oracle_SQL
    20170623_oracle备份和恢复_常见问题
    20170623_oracle基础知识_常见问题
    数字类型入门
    数据类型基础
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5463554.html
Copyright © 2011-2022 走看看