PAT甲级 1135 - Is It A Red-Black Tree
2018-02-25 13:18
302 查看
主要是建树,可以用指针也可以用数组
判断的话回溯判断两个点
左右孩子的当前的黑节点数目是否一样
判断当前是否为红色,则孩子节点为黑色成立与否
根节点要为黑色,故最后需要确认
判断的话回溯判断两个点
左右孩子的当前的黑节点数目是否一样
判断当前是否为红色,则孩子节点为黑色成立与否
根节点要为黑色,故最后需要确认
#include<bits/stdc++.h> using namespace std; const int maxn=30+2; bool flag; int inOrder[maxn],preOrder[maxn]; bool cmp(int a,int b){ return abs(a)<abs(b); } struct node{ int v; int b_num; }tree[1024*1024+1]; void buildTree(int cur,int preL,int preR,int inL,int inR){ if(!flag || preL>preR || inL>inR)return; int i; for(i=inL;i<=inR;++i){ if(preOrder[preL]==inOrder[i]){ break; } } tree[cur].v=preOrder[preL]; buildTree(cur<<1,preL+1,preL+i-inL,inL,i-1); buildTree((cur<<1)|1,preR-inR+i+1,preR,i+1,inR); if(tree[cur<<1].b_num!=tree[(cur<<1)|1].b_num){ flag=false; } if(tree[cur].v<0){//red if(tree[cur<<1].v<0 || tree[(cur<<1)|1].v<0){ flag=false; } tree[cur].b_num=tree[cur<<1].b_num; }else{//black tree[cur].b_num=tree[cur<<1].b_num+1; } } int main(){ int k,n; scanf("%d",&k); while(k--){ flag=true; scanf("%d",&n); for(int i=1;i<=1024*1024;++i){ tree[i].v=0; tree[i].b_num=0; } for(int i=1;i<=n;++i){ scanf("%d",preOrder+i); inOrder[i]=preOrder[i]; } sort(inOrder+1,inOrder+1+n,cmp); buildTree(1,1,n,1,n); if(tree[1].v<0)flag=false; if(flag)printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- 1135. Is It A Red-Black Tree (30)-PAT甲级真题
- PAT 甲级 1135 Is It A Red-Black Tree
- PAT甲级1135 Is It A Red-Black Tree
- PAT甲级-1135 Is It A Red-Black Tree
- PAT甲级 1135.Is It A Red-Black Tree (30)
- PAT甲级 1135. Is It A Red-Black Tree (30) 建树+深搜
- PAT (Advanced Level)1135. Is It A Red-Black Tree (30) 指针 建树 深度优先遍历
- PAT 1135. Is It A Red-Black Tree (30) 二叉搜索树建立 + 红黑树判断
- PAT-1135 Is It A Red-Black Tree(二叉查找树的创建和遍历)
- (pat)A1135. Is It A Red-Black Tree
- 【PAT 1135. Is It A Red-Black Tree (30)】& 二叉树
- pat1135 Is It A Red-Black Tree (30)(红黑树)
- PAT (Advanced Level) Practise 1135 Is It A Red-Black Tree (30)
- 1135. Is It A Red-Black Tree (30)
- 1135. Is It A Red-Black Tree (30)
- 1135. Is It A Red-Black Tree (30)/红黑树 搜索建树
- 1135. Is It A Red-Black Tree (30)
- 1135. Is It A Red-Black Tree (30)(判断红黑树)
- 1135. Is It A Red-Black Tree (30)(红黑树)
- 1135. Is It A Red-Black Tree 解析