L3-010 是否完全二叉搜索树 (30分)

L3-010 是否完全二叉搜索树 (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<iostream>
#include<vector>
using namespace std;
vector<int> tree(1009);
void  build( int root ,int val){
	  if( !tree[root] ){
          tree[root] = val;	  	
 	  }
	  else if( val > tree[root] ){
	  	   build( root*2 ,val);
	  } 
	  else build( root*2+1,val);
}
int  main(void){ 
 	 int n,t;
	 scanf("%d",&n);
	 for( int i=1;i<=n;i++){
		  scanf("%d",&t);
	      build( 1 , t );
	 }
	 int flag = 0,cnt;
	 for( int i=1;i<1009;i++){
	 	  if( tree[i] ){ 
	 	      if( flag )
	 	        cout<<" ";
	 	      else flag =1;
			  cout<<tree[i];
	 	      cnt=i;
		  }
	 } 
	 if(  cnt > n )
	      cout<<endl<<"NO"<<endl;
	 else cout<<endl<<"YES"<<endl;
	 return 0;
}

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页