题目大意:
数一个BST(二叉查找树)最后两层节点的数量。
解题思路:
维护一个深度参数,建树时记录下最大深度然后BFS遍历统计即可。
代码如下:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
int n,ma=0,n1,n2;
struct node
{
node* lchild;
node* rchild;
int data,depath=0;
};
node* newnode(int data)
{
node* tmp=new node;
tmp->lchild=NULL;
tmp->rchild=NULL;
tmp->data=data;
return tmp;
}
void create(node* &root,int data,int level)
{
if(root==NULL)
{
root=newnode(data);
root->depath=level+1;
if(root->depath>ma)ma=root->depath;
return;
}
if(data>root->data)create(root->rchild,data,root->depath);
else create(root->lchild,data,root->depath);
}
void bfs(node* root)
{
queue<node*> q;
q.push(root);
while(!q.empty())
{
node* tmp=q.front();
q.pop();
if(tmp->depath==ma)n1++;//如果是最后一层
else if(tmp->depath==(ma-1))n2++;//如果是倒数第二层
if(tmp->lchild!=NULL)q.push(tmp->lchild);
if(tmp->rchild!=NULL)q.push(tmp->rchild);
}
}
int main()
{
scanf("%d",&n);
node* root=NULL;
for(int i=0;i<n;i++)
{
int tmp;
scanf("%d",&tmp);
create(root,tmp,0);
}
bfs(root);
printf("%d + %d = %d\n",n1,n2,n1+n2);
return 0;
}