坑点在于相等的节点是存在左子树的……在给出来的用例里面放左子树右子树答案都是一样的
思路就是顺序建树插入节点,最后再统计最大层数和每层的节点数,最后输出。
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int m,n;
struct Node{
int left=-1,right=-1,val,level=0;
};
vector<Node> tree;
int level[1005];//level to number
int maxlevel=0;
void insertNode(Node &node,int fathidx){
if(tree.empty()){
tree.push_back(node);
return;
}
if(node.val<=tree[fathidx].val){
if(tree[fathidx].left!=-1)insertNode(node,tree[fathidx].left);
else{
node.level=tree[fathidx].level+1;
tree[fathidx].left=tree.size();
tree.push_back(node);
}
}
if(node.val>tree[fathidx].val){
if(tree[fathidx].right!=-1)insertNode(node,tree[fathidx].right);
else{
node.level=tree[fathidx].level+1;
tree[fathidx].right=tree.size();
tree.push_back(node);
}
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
int val;
scanf("%d",&val);
Node node;
node.val=val;
insertNode(node,0);
}
for(int i=0;i<n;i++){
level[tree[i].level]++;
maxlevel=max(tree[i].level,maxlevel);
}
printf("%d + %d = %d",level[maxlevel],level[maxlevel-1],level[maxlevel-1]+level[maxlevel]);
}