栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

输出用先序遍历创建的二叉树是否为完全二叉树的判定结果

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

输出用先序遍历创建的二叉树是否为完全二叉树的判定结果

题目描述
利用先序递归遍历算法创建二叉树并判断该二叉树是否为完全二叉树。完全二叉树只能是同深度的满二叉树缺少最后一层倒数连续个叶子结点。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#“时表示该结点不需要创建,否则创建该结点。最后判断创建完成的二叉树度是否为完全二叉树。需要注意输入数据序列中的”#“字符和非”#"字符的序列及个数关系,这会最终决定创建的二叉树的形态。

输入
输入为接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。

输出
对应的二叉树是否为完全二叉树的判断结果。若是输出"Y",否则输出"N"。

样例输入

A##
ABC####
AB##C##
ABCD###EF##G###
A##B##
ABC##D##EG###

样例输出

Y
N
Y
N
Y
Y
假设N0是度为0的结点总数(即叶子结点数),N1是度为1的结点总数,N2是度为2的结点总数,由二叉树的性质可知:N0=N2+1,则N= N0+N1+N2(其中n为完全二叉树的结点总数),由上述公式把N2消去得:N= 2N0+N1-1,由于完全二叉树中度为1的结点数只有两种可能0或1,由此得到N0=(N+1)/2或N0=N/2。

#include
#define ll long long
//#define int ll
#define pii pair
#define mem(a,b) memset(a,b,sizeof(a))
#define endl 'n'
#define N 100005
const int inf=0x3f3f3f3f;
const double pi=acos(-1.0);
using namespace std;
int con=0;//结点总数 
int cc=0;//度为0的节点数 
typedef struct TNodes
{
	int data;
	TNodes *lnode,*rnode;
}*TNode;
void Creat(TNode &t)
{
	char c;
	cin>>c;
	if(c=='#') t=NULL;
	else
	{
		con++;
		t=new TNodes;
		t->data=c;
		Creat(t->lnode);
		Creat(t->rnode);
	}
}
void pd(TNode &t)
{
	if(!t) return;
	if(!t->lnode&&!t->rnode) cc++;
	pd(t->lnode);
	pd(t->rnode);
}
signed main()
{	
	TNode t;
	Creat(t);
	pd(t);
	if(con/2==cc||(con+1)/2==cc) cout<<"Y";
	else cout<<"N";
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/920642.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号