这道题不需要平衡 就比较简单
同时我新学会了new Node() 构造函数的写法,可以不用写malloc了
然后是输出最后两层的层次遍历,这个比较巧妙,相当于每层加入队列,然后队列前的那么多数继续生成下一层,这样就可以得到最后2层
同时if (pointer != NULL)
可以缺省写作 if (pointer)
, 没毛病
#include <bits/stdc++.h>
using namespace std;
struct Node
{
int key;
Node *left, *right;
Node(int key) : key(key)
{
left = NULL;
right = NULL;
}
};
Node *insert(Node *node, int key)
{
if (node == NULL) return new Node(key);
if (key <= node->key) node->left = insert(node->left, key);
else if (key > node->key) node->right = insert(node->right, key);
return node;
}
int main()
{
freopen("in", "r", stdin);
int n;
scanf("%d", &n);
Node *root = NULL;
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
root = insert(root, x);
}
queue<Node*> q;
q.push(root);
int ans[2] = {0};
while (!q.empty()) {
ans[1] = ans[0];
ans[0] = q.size();
for (int i = 0; i < ans[0]; i++) {
Node *tmp = q.front();
q.pop();
if (tmp->left) q.push(tmp->left);
if (tmp->right) q.push(tmp->right);
}
}
printf("%d + %d = %d\n", ans[0], ans[1], ans[0] + ans[1]);
}