读取那里注意可能是两位数,不能用char c,坑到了(测试点234)
1、一开始的处理和1102 Invert a Binary Tree (25分)一样,不过1102的限制是n<10,这里是n<20,所以出错了-,-
2、静态存储二叉树,没出现的数字是root
3、判断是否为完全二叉树,这里的方法是按完全二叉树的规则给结点编号index,然后根据index排序,如果是完全二叉树那么index就是从0->n-1,最后一个结点当然就是v[n-1].id
4、判断是否为完全二叉树,还可以直接找最大下标值。
递归出最⼤的下标值,完全⼆叉树⼀定把前⾯的下标充满: 最⼤的下标值 == 最⼤的节点数;不完全⼆叉树前满⼀定有位置是空,会往后挤: 最⼤的下标值 > 最⼤的节点数~
5、每次不懂得,基本都可以拿深搜来解决~
#include
using namespace std;
struct Node{
int id,index,left,right;
}node[25];
vector v;
int exist[25]={0};
//完全二叉树的判断,用index~
void dfs(int root,int index){
if(node[root].left!=-1) dfs(node[root].left,index*2+1);
v.push_back({root,index,0,0});
if(node[root].right!=-1) dfs(node[root].right,index*2+2);
}
bool cmp(Node a,Node b){
return a.index>n;
int root=0;
for(int i=0;i>a>>b;
if(a!="-"){
node[i].left=stoi(a);exist[stoi(a)]++;
}else node[i].left=-1;
if(b!="-"){
node[i].right=stoi(b);exist[stoi(b)]++;
}else node[i].right=-1;
}
for(int i=0;i
#include
using namespace std;
struct Node{
int left,right;
}node[25];
int maxn=-1,ans;
void dfs(int root,int index){
if(index>maxn){
maxn=index;
ans=root;
}
if(node[root].left!=-1) dfs(node[root].left,index*2);
if(node[root].right!=-1) dfs(node[root].right,index*2+1);
}
int main(){
int n,root;
int exist[25]={0};
cin>>n;
for(int i=0;i>a>>b;
if(a!="-"){
node[i].left=stoi(a);exist[stoi(a)]++;
}else node[i].left=-1;
if(b!="-"){
node[i].right=stoi(b);exist[stoi(b)]++;
}else node[i].right=-1;
}
for(int i=0;i