分析:分为建树和DFS两步进行,注意使用数组记录每一层的结点数
#include<bits/stdc++.h>
using namespace std;
struct Node{
int val;
Node *left, *right;
Node(int e){
this->val = e;
}
};
int levelNum[1000], maxLevel = -1;
Node* add(Node* node, int e){
if(node == nullptr){
node = new Node(e);
node->left = node->right = nullptr;
}
else if(node->val < e){
node->right = add(node->right, e);
}
else{
node->left = add(node->left, e);
}
return node;
}
void DFS(Node* node, int level){
if(node == nullptr){
maxLevel = max(maxLevel, level);
return;
}
levelNum[level] ++;
DFS(node->left, level + 1);
DFS(node->right, level + 1);
}
int main(){
int n, a;
cin >> n;
Node* root = nullptr;
while(n --){
cin >> a;
root = add(root, a);
}
DFS(root, 0);
printf("%d + %d = %d\n", levelNum[maxLevel - 1], levelNum[maxLevel - 2], levelNum[maxLevel - 1] + levelNum[maxLevel - 2]);
return 0;
}