Brave____heart 2021-05-20 20:14 采纳率: 100%
浏览 24
已采纳

求助,这个用结构数组建立二叉树的程序为什么输入'C'这个字符会出错啊?

 

//mooc第四讲小白专场判别两个二叉树是否同构 //输入C会出错,找不到原因 
#include<stdio.h>
#include<stdlib.h>
#define Null -1
#define MaxTree 10
typedef char ElementType;
typedef int Tree;
struct TreeNode{
	ElementType Element;
	Tree Left;
	Tree Right;
}T1[MaxTree],T2[MaxTree];
Tree BuildTree(struct TreeNode T[]);
int Isomorphic(Tree R1,Tree R2);
int main()
{
	Tree R1,R2;
	R1=BuildTree(T1);
	R2=BuildTree(T2);
	if(Isomorphic(R1,R2))printf("yes\n");
	else printf("no\n");
	return 0;
}
//建立树 
Tree BuildTree(struct TreeNode T[])
{
	int i,N,Root=Null;
	char cl,cr;
	printf("请输入树中元素的个数\n");
	scanf("%d",&N);
	int check[N];
	if(N){
		for(i=0;i<N;i++)check[i]=0;
		for(i=0;i<N;i++){
			printf("请输入T[%d]的Element、Left、Right,中间用空格隔开\n",i);
			scanf("%c %c %c\n",&T[i].Element,&cl,&cr);
			if(cl!='-'){
			T[i].Left=cl-'0';
			check[T[i].Left]=1;
			}
			else T[i].Left=Null;
			if(cr!='-'){
			T[i].Right=cr-'0';
			check[T[i].Right]=1;
			}
			else T[i].Right=Null;
		}
	} 
	for(i=0;i<N;i++){
		if(!check[i]){
			Root=i;
			break;
		}
	}
	return Root;
}
//判断树是否同构 
int Isomorphic(Tree R1,Tree R2)
{
	if((R1==Null)&&(R2==Null))
		return 1;
	if(((R1==Null)&&(R2!=Null))||((R1!=Null)&&(R2==Null)))
		return 0;
	if(T1[R1].Element!=T2[R2].Element)
		return 0;
	if((T1[R1].Left==Null)&&(T2[R2].Left==Null)) 
		return Isomorphic(T1[R1].Right,T2[R2].Right);
	if((T1[R1].Left!=Null)&&(T2[R2].Left!=Null)&&(T1[T1[R1].Left].Element==T2[T2[R2].Left].Element))
		return (Isomorphic(T1[R1].Left,T2[R2].Left)&&Isomorphic(T1[R1].Right,T2[R2].Right));
	else
		return (Isomorphic(T1[R1].Left,T2[R2].Right)&&Isomorphic(T1[R1].Right,T2[R2].Left));
}
  • 写回答

3条回答 默认 最新

  • 关注

    scanf("%c %c %c\n",&T[i].Element,&cl,&cr); 改为 fflush(stdin); scanf("%c",&T[i]); fflush(stdin); scanf("%c",&cl); fflush(stdin); scanf("%c",&cr);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 envi深度学习模块错误原因
  • ¥15 孟德尔随机化混杂因素
  • ¥15 关于react-hook组件用函数控制是否渲染的及时性问题。
  • ¥50 Linux下的软件,要做模块化拆分。进程间通信是否有开源框架可以借用?
  • ¥100 修改原有的MYSQL存储代码,在最右边添加多列数据
  • ¥20 Open Interpreter 使用时报错: still has pending operation at deallocation, the process may crash
  • ¥15 qt中链接动态链接库,调用其中的函数,该函数的参数需要传入回调函数,自己创建的回调函数无法作为参数传递进去
  • ¥15 matlab svm二分类代码问题
  • ¥40 求一款能支持ios15以上的屏蔽越狱插件。比较好用的
  • ¥15 C++ QT对比内存字符(形式不定)