Given a tree, you are supposed to tell if it is a complete binary tree.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (≤) which is the total number of nodes in the tree -- and hence the nodes are numbered from 0 to N−1. Then N lines follow, each corresponds to a node, and gives the indices of the left and right children of the node. If the child does not exist, a - will be put at the position. Any pair of children are separated by a space.

Output Specification:

For each case, print in one line YES and the index of the last node if the tree is a complete binary tree, or NO and the index of the root if not. There must be exactly one space separating the word and the number.

Sample Input 1:

9
7 8
- -
- -
- -
0 1
2 3
4 5
- -
- -

Sample Output 1:

YES 8

Sample Input 2:

8
- -
4 5
0 6
- -
2 3
- 7
- -
- -

Sample Output 2:

NO 1
/*
思路是先建树,找根节点,先序遍历找到最大节点,如果等于n表示完全二叉树
*/
#include<iostream>
#include<cstdlib>
using namespace std;
const int maxn = ; bool isRoot[maxn] = {};
int max_index = -,last_v;
int root = ; struct Node
{
int left,right;
}node[maxn]; int getNum(string s)
{
int iRet = -;
if(s != "-")
{
iRet = atoi(s.c_str());
isRoot[iRet] = ;
}
return iRet;
} void FindRoot(int n)
{
for(int i = ; i < n; i++)
{
if( == isRoot[i])
{
root = i;
break;
}
}
} void preOrder(int v,int index)
{
if(- == v)
{
return;
}
if(index > max_index)
{
max_index = index;
last_v = v;
}
preOrder(node[v].left,index*);
preOrder(node[v].right,index*+);
} int main()
{
int n;
cin >> n;
string s1,s2;
for(int i = ; i < n; i++)
{
cin >> s1 >> s2;
node[i].left = getNum(s1);
node[i].right = getNum(s2);
}
FindRoot(n);
preOrder(root,);
if(max_index == n)
{
printf("YES %d",last_v);
}
else
{
printf("NO %d",root);
}
return ;
}

下面版本三个点段错误,待查

#include<cstdio>

const int maxn = ;
struct Node
{
int left,right;
}node[maxn]; int max_index = -,last_v;
bool isRoot[maxn] = {};
int root; int changeNum(char c)
{
int iRet = -;
if(c != '-')
{
iRet = c - '';
isRoot[iRet] = ;
}
return iRet;
} void FindRoot(int n)
{
for(int i = ; i < n; i++)
{
if( == isRoot[i])
{
root = i;
break;
}
}
} void preOrder(int v,int index)
{
if(- == v)
{
return;
}
if(index > max_index)
{
max_index = index;
last_v = v;
}
preOrder(node[v].left,index*);
preOrder(node[v].right,index*+);
} int main()
{
int n;
scanf("%d",&n);
char c1,c2;
for(int i = ; i < n; i++)
{
getchar();
scanf("%c%*c%c",&c1,&c2);
node[i].left = changeNum(c1);
node[i].right = changeNum(c2);
}
FindRoot(n);
preOrder(root,);
if(max_index == n)
{
printf("YES %d",last_v);
}
else
{
printf("NO %d",root);
}
return ;
}

1110 Complete Binary Tree (25 分)的更多相关文章

  1. 【PAT甲级】1110 Complete Binary Tree (25分)

    题意: 输入一个正整数N(<=20),代表结点个数(0~N-1),接着输入N行每行包括每个结点的左右子结点,'-'表示无该子结点,输出是否是一颗完全二叉树,是的话输出最后一个子结点否则输出根节点 ...

  2. [二叉树建树&完全二叉树判断] 1110. Complete Binary Tree (25)

    1110. Complete Binary Tree (25) Given a tree, you are supposed to tell if it is a complete binary tr ...

  3. 1110. Complete Binary Tree (25)

    Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each in ...

  4. PAT Advanced 1110 Complete Binary Tree (25) [完全⼆叉树]

    题目 Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each ...

  5. PAT甲题题解-1110. Complete Binary Tree (25)-(判断是否为完全二叉树)

    题意:判断一个节点为n的二叉树是否为完全二叉树.Yes输出完全二叉树的最后一个节点,No输出根节点. 建树,然后分别将该树与节点树为n的二叉树相比较,统计对应的节点个数,如果为n,则为完全二叉树,否则 ...

  6. PAT (Advanced Level) 1110. Complete Binary Tree (25)

    判断一棵二叉树是否完全二叉树. #include<cstdio> #include<cstring> #include<cmath> #include<vec ...

  7. PAT甲级——1110 Complete Binary Tree (完全二叉树)

    此文章同步发布在CSDN上:https://blog.csdn.net/weixin_44385565/article/details/90317830   1110 Complete Binary ...

  8. 1110 Complete Binary Tree

    1110 Complete Binary Tree (25)(25 分) Given a tree, you are supposed to tell if it is a complete bina ...

  9. 1110 Complete Binary Tree (25 分)

    1110 Complete Binary Tree (25 分) Given a tree, you are supposed to tell if it is a complete binary t ...

随机推荐

  1. typescript中新增的基本数据类型

    javascript中有7种数据类型,分别是:boolean,number,string,null,undefined和object,以及在es6中新增的一种类型 symbol.而typescript ...

  2. Idea中通过Git将代码同步到GitHub

    一.Idea中配置Git 点击IntelliJ IDEA->Preferences...->Version Control->Git->Path to Git executab ...

  3. js中‘0’到底是 true 还是 false

    if ('0') alert("'0' is true");  if ('0' == false) alert("'0' is false");结果是,两次都 ...

  4. spark教程(九)-操作数据库

    数据库也是 spark 数据源创建 df 的一种方式,因为比较重要,所以单独算一节. 本文以 postgres 为例 安装 JDBC 首先需要 安装 postgres 的客户端驱动,即 JDBC 驱动 ...

  5. python网络爬虫(7)爬取静态数据详解

    目的 爬取http://seputu.com/数据并存储csv文件 导入库 lxml用于解析解析网页HTML等源码,提取数据.一些参考:https://www.cnblogs.com/zhangxin ...

  6. qt treaview项checkbox样式

    QTreeView::indicator:enabled:checked { /** 指示器 - 选中 **/ image: url(yzfx/checkbox_checked.png);}QTree ...

  7. Vue中如何插入m3u8格式视频,3分钟学会!

    ​        大家都知道video只支持ogg.webm.MP4格式,但是要是m3u8格式的视频怎么办?最近遇到这个问题在网上找了好多办法都不行,最后找到video.js后才完美解决,所以决定写一 ...

  8. 解决 android studio 出现:"AndroidStudio:Could not GET 'https://dl.google.com Received status code 400 from server: Bad Request"问题

    一.android studio 编译项目时出现"AndroidStudio:Could not GET 'https://dl.google.com Received status cod ...

  9. 求二叉搜索树的第k小的节点

    题目描述: /** * 给定一棵二叉搜索树,请找出其中的第k小的结点. * 例如, (5,3,7,2,4,6,8)中, * 按结点数值大小顺序第三小结点的值为4. * 这是层序遍历: * 5 * 3 ...

  10. jquery判断cookie是否存在

    首先请加载jquery库与jquery cookie插件 http://code.jquery.com/jquery-latest.js http://files.cnblogs.com/afish/ ...