HDU 3791 二叉搜索树(BST)

 

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3791

       直接按第一个序列建二叉搜索树,然后接下来每一个需要判断的字符串都要建一个二叉搜索树,然后遍历一遍判断两个二叉搜索树是否相同就好了,需要注意的是最后遍历二叉搜索树的数据范围。


AC代码:

#include <bits/stdc++.h>
#define maxn 10005
using namespace std;
string str;
int a[maxn], b[maxn];
int n;

void insert(int x, int pre[]){
  int cnt = 1;
  while(pre[cnt] != -1){
    if(pre[cnt] >= x){
      cnt = (cnt << 1);
    }
    else cnt = (cnt << 1 | 1);
  }
  pre[cnt] = x;
  return ;
}

void Build(string s, int pre[]){
  pre[1] = (s[0] - '0');
  int len = s.length();
  for(int i=1;i<len;i++){
    insert(s[i] - '0', pre);
  }
  return ;
}

int main()
{
  while(~scanf("%d", &n)){
    if(n == 0) break;
    cin>>str;
    memset(a, -1, sizeof(a));
    Build(str, a);
    while(n--){
      cin>>str;
      memset(b, -1, sizeof(b));
      Build(str, b);
      bool flag = true;
      int len = str.length();
      for(int i=0;i<=10000;i++){
        if(a[i] != b[i]){
          flag = false;
          break;
        }
      }
      if(flag) puts("YES");
      else puts("NO");
    }
  }
  return 0;
}

 

全部评论

相关推荐

02-25 16:55
已编辑
北京工业大学 Java
211本,找日常实习的话,如果面向中厂的话,需要刷hot100么?因为之前从来没刷过,算法仅限于学校课程水平,准备3月投递简历,现在还需要背八股文,时间有些紧张,还需要刷算法题么?同时什么样的公司可以算是中厂呢?
程序员小白条:中大厂说的上名字的,必定要算法,hot100只是最基础的了,题库远不止100题捏,一般在300-400题量之间,算法=学校课程=简单题也做不出,多准备八股文和算法吧,其他项目可以放放,精刷算法就行了,花时间成长很快的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务