您的位置:首页 > Web前端 > Node.js

PAT_A 1115. Counting Nodes in a BST (30)

2016-10-06 19:37 351 查看

1115. Counting Nodes in a BST (30)

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:

The left subtree of a node contains only nodes with keys less than or equal to the node’s key.

The right subtree of a node contains only nodes with keys greater than the node’s key.

Both the left and right subtrees must also be binary search trees.

Insert a sequence of numbers into an initially empty binary search tree. Then you are supposed to count the total number of nodes in the lowest 2 levels of the resulting tree.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (<=1000) which is the size of the input sequence. Then given in the next line are the N integers in [-1000 1000] which are supposed to be inserted into an initially empty binary search tree.

Output Specification:

For each case, print in one line the numbers of nodes in the lowest 2 levels of the resulting tree in the format:

n1 + n2 = n

where n1 is the number of nodes in the lowest level, n2 is that of the level above, and n is the sum.

Sample Input:

9

25 30 42 16 20 20 35 -5 28

Sample Output:

2 + 4 = 6

分析

二叉搜索树,计算叶子结点和其父结点的个数和。需要先构建该二叉树。

code

#include<iostream>
#include<vector>
using namespace std;
struct A
{
A*l;
A*r;
int val;
int deep;
A()
{
l=r=NULL;
val=deep=0;
}
};
int deep=1;
int MAX=1;
//递归构造二叉树
void create(A*node,A*d)
{
if(node==NULL)
return;
deep++;
if(node->val>=d->val)
{
if(node->l==NULL)
{
node->l=d;
d->deep=deep;
if(MAX<deep)
MAX=deep;

deep=1;
}else
create(node->l,d);
}
else
{
if(node->r==NULL)
{
node->r=d;
d->deep=deep;
if(MAX<deep)
MAX=deep;
deep=1;
}else
create(node->r,d);
}
}
int main()
{
int n=0;
cin>>n;
int m=0;
int o1=0;
int o2=0;
A*data=NULL;

vector<A*>in;
if(n==1)
{
cin>>o1;
cout<<1<<" + "<<0<<" = "<<1<<endl;
return 0;
}else
{
cin>>m;
data=new A;
data->val=m;
data->deep=1;
in.push_back(data);
}
for(int i=1;i<n;i++)
{
cin>>m;
A *tmp=new A;
tmp->val=m;
create(data,tmp);
in.push_back(tmp);
}
for(A*a:in)
{
if(a->deep==MAX)
o1++;
if(a->deep==(MAX-1))
o2++;
delete a;
}
cout<<o1<<" + "<<o2<<" = "<<o1+o2<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉搜索树 PAT