7-13 是否完全二叉搜索树

7-13 是否完全二叉搜索树 (30 分)

将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。

输入格式:

输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。

输出格式:

将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出YES,如果该树是完全二叉树;否则输出NO

输入样例1:

9
38 45 42 24 58 30 67 12 51

输出样例1:

38 45 24 58 42 30 12 67 51
YES

输入样例2:

8
38 24 12 45 58 67 42 51

输出样例2:

38 45 24 58 42 12 67 51
NO
#include <bits/stdc++.h>
using namespace std;
int a[100]={0};
void insert(int n,int data)
{
	if(a[n]==0)
	{
		a[n]=data;
		return;
	}
	if(a[n]<data)
		insert(n*2,data);
	else
		insert(n*2+1,data);
}
int main()
{
	int n,m;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>m;
		insert(1,m);
	}
	int i=0,flag=0,num=0;
	while(num<n)
	{
		if(a[i]!=0)
		{
			if(flag==0) flag=1;
			else cout<<" ";
			cout<<a[i];
			num++;
		}
		i++;
	}
	cout<<endl;
	if(i==num+1)
		cout<<"YES";
	else
		cout<<"NO";
}

猜你喜欢

转载自blog.csdn.net/Super_gxw/article/details/88668819