一、题目概述
依据给定数据序列构造BST,并求出BST底部两层结点数。
二、思路
1、经典的二叉排序树按序插入构造;
2、层序遍历统计底部两层结点数底部两层结点数。
三、代码
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
struct node
{
int data;
node *lchild, *rchild;
};
vector<int> cnt(1000, 0);
void insert(node *&t, int key, int lev, int &Max)
{
if(!t)
{
Max = max(Max, lev);
++cnt[lev];
t = new(node);
t->data = key;
t->lchild = t->rchild = NULL;
}
else if(key <= t->data)
insert(t->lchild, key, lev + 1, Max);
else insert(t->rchild, key, lev + 1, Max);
}
int main()
{
int N, lev = 0, n1, n2;
node *root = NULL;
scanf("%d", &N);
for(int i = 0, key; i < N; ++i)
{
scanf("%d", &key);
insert(root, key, 0, lev);
}
n2 = lev ? cnt[lev - 1]:0;
n1 = cnt[lev];
printf("%d + %d = %d", n1, n2, n1 + n2);
}