使用BFS解题(那啥,使用DFS解题是最简单的)
#include<iostream>
#include<queue>
using namespace std;
int n, hashTable[1010] = {0}, maxLayer = -1;
struct node{
int data, layer;
node *left, *right;
};
void insert(node* &root, int x) {
if(root == NULL) {
root = new node;
root -> data = x;
root -> left = root -> right = NULL;
return ;
}
if(x <= root -> data) insert(root -> left, x);
else insert(root -> right, x);
}
void BFS(node* root) {
queue<node*> q;
root -> layer = 0;
q.push(root);
while(!q.empty()) {
node* top = q.front();
q.pop();
hashTable[top -> layer] ++;
if(top -> layer > maxLayer) maxLayer = top -> layer;
if(top -> left) {
top -> left -> layer = top -> layer + 1;
q.push(top -> left);
}
if(top -> right) {
top -> right -> layer = top -> layer + 1;
q.push(top -> right);
}
}
}
int main() {
cin >> n;
node* root = NULL;
vector<int> num(n);
for(int i = 0; i < n; i++) {
cin >> num[i];
insert(root, num[i]);
}
BFS(root);
cout << hashTable[maxLayer] << " + " << hashTable[maxLayer - 1] << " = " << hashTable[maxLayer] + hashTable[maxLayer - 1];
return 0;
}
使用DFS解题
#include<iostream>
#include<vector>
using namespace std;
int n, hashTable[1010] = {0}, maxDeepth = 0;
struct node {
int data;
node *left, *right;
};
void insert(node* &root, int x) {
if(root == NULL) {
root = new node;
root -> data = x;
root -> left = root -> right = NULL;
return ;
}
if(x <= root -> data) insert(root -> left, x);
else insert(root -> right, x);
}
void DFS(node* root, int deepth) {
if(root == NULL) {
maxDeepth = max(deepth - 1, maxDeepth);
return;
}
hashTable[deepth] ++;
DFS(root -> left, deepth + 1);
DFS(root -> right, deepth + 1);
}
int main() {
cin >> n;
node* root = NULL;
vector<int> num(n);
for(int i = 0; i < n; i++) {
cin >> num[i];
insert(root, num[i]);
}
DFS(root, 0);
cout << hashTable[maxDeepth] << " + " << hashTable[maxDeepth - 1] << " = " << hashTable[maxDeepth] + hashTable[maxDeepth - 1];
return 0;
}