二叉树循环出现界面假卡问题

typedef struct Node
{
	DataType data;
	struct Node *leftChild;
	struct Node *rightChild;
}BiTreeNode;//结构体定义
void Initiate(BiTreeNode **root)
{
	*root=(BiTreeNode *)malloc(sizeof(BiTreeNode));
	(*root)->leftChild=NULL;
	(*root)->rightChild=NULL;

}//二叉树的初始化
BiTreeNode *InsertLeftNode(BiTreeNode *curr,DataType x)
{
	BiTreeNode *s, *t;
	if(curr==NULL) return NULL;
	t=curr->leftChild;
	s=(BiTreeNode *)malloc(sizeof(BiTreeNode));
	s->data=x;
	s->leftChild=t;
	s->rightChild=NULL;
	curr->leftChild=s;
	return curr->leftChild;
}//二叉树左插入结点
BiTreeNode *InsertRightNode(BiTreeNode *curr,DataType x)
{
	BiTreeNode *s,*t;
	if (curr==NULL)return NULL;
	t=curr->rightChild;
	s=(BiTreeNode *)malloc(sizeof(BiTreeNode));
	s->data=x;
	s->rightChild=t;
	s->leftChild=NULL;
	curr->rightChild=s;
	return curr->rightChild;
}//二叉树右插入结点
void Destroy (BiTreeNode **root)
{
	if ((*root)!=NULL && (*root)->leftChild!=NULL)
		Destroy (&(*root)->leftChild);
	if((*root)!=NULL && (*root)->rightChild !=NULL)
		Destroy (&(*root)->rightChild);
	free(*root);
}//撤销二叉树操作

BiTreeNode *DeleteLeftTree(BiTreeNode *curr)
{
	if (curr==NULL||curr->leftChild==NULL)return NULL;
	Destroy(&curr->leftChild);
	curr->leftChild=NULL;
	return curr;
}//二叉树左删除结点
BiTreeNode *DeleteRightTree(BiTreeNode *curr)
{
	if(curr==NULL||curr->rightChild==NULL)return NULL;
	Destroy (&curr->rightChild);
	curr->rightChild=NULL;
	return curr;
}//二叉树右删除结点
void PreOrder(BiTreeNode *root,void visit(DataType item))
{
	if(root!=NULL)
	{
		visit (root->data);
		PreOrder (root->leftChild,visit);
		PreOrder(root->rightChild,visit);
	}
}//前序遍历二叉树root访问操作为Visit函数
void InOrder(BiTreeNode *root, void visit(DataType item))
{
	if(root!=NULL)
	{
		InOrder(root->leftChild,visit);
		visit(root->data);
		InOrder(root->rightChild,visit);
	}
}//中序遍历二叉树root访问操作为Visit函数
void PostOrder(BiTreeNode *root,void visit(DataType item))
{
	if(root!=NULL)
	{
		PostOrder(root->leftChild,visit);
		PostOrder(root->rightChild,visit);
		visit(root->data);
	}
}//后序遍历二叉树root访问操作为Visit函数

void PrintBiTree(BiTreeNode *root,int n)
{
	int i;
	if(root==NULL) return;
	PrintBiTree (root->rightChild,n+1);
	for (i=0;i<n-1;i++)
	{
		printf(" ");
	}
	if(n>0)
	{
		printf("---");
		printf("%c\n",root->data);
	}
	PrintBiTree(root->leftChild,n+1);
}//打印二叉树
BiTreeNode *Search(BiTreeNode *root,DataType x)
{
	BiTreeNode *find=NULL;
	if(root!=NULL)
	{
		if(root->data==x)
			find=root;
		else
		{
			find=Search(root->leftChild,x);
			if(find==NULL)
				find=Search(root->rightChild,x);
		}
	}
	return find;
}//查找数据元素

void Visit(DataType item)
{
	printf("%c  ",item);
}//显示结点信息
# include<stdlib.h>
# include<stdio.h>
typedef char DataType;
#include"BiTree.h"
#include"BiTreeTraverse.h"
void main(void)
{

	BiTreeNode *root, *p,*find;
	char x='E';

	
	Initiate(&root);
	p=InsertLeftNode(root,'A');
	p=InsertLeftNode(p,'B');
	p=InsertLeftNode(p,'D');
	p=InsertRightNode(p,'G');
	
	p=InsertRightNode(root->leftChild,'C');
	InsertLeftNode(p,'E');
	InsertRightNode(p,'F');
	PrintBiTree(root,0);
	printf("前序遍历:\n");
	PreOrder(root->leftChild,Visit);
	printf("中序遍历:\n");
	InOrder(root->leftChild,Visit);
	printf("后序遍历:\n");
	PostOrder(root->leftChild,Visit);
	find=Search(root,x);
	if(find!=NULL)
		printf("\n数据元素%c在二叉树中",x);
	else
		printf("\n数据元素%c不在二叉树中",x);


	Destroy(&root);
	
}

这个代码是当时我们书上的代码
当时我字节改了BUG以后运行出来的界面一直在自己动向下移动,当时的自己在网上查了好多的的原创的作品,发现环视界面假卡的这块有问题,界面假卡当时网上说的是程序里面的循环是一个死循环,最后我发现我的程序运行界面可以出现但是不能出现数据的原因是因为打印二叉树这里`void PrintBiTree(BiTreeNode *root,int n)
{
int i;
if(root==NULL) return;
PrintBiTree (root->rightChild,n+1);
for (i=0;i<n-1;i++)
{
printf(" “);
}
if(n>0)
{
printf(”—");
printf("%c\n",root->data);
}
PrintBiTree(root->leftChild,n+1);
}//打印二叉树
我将for循环的i++写成了n++
大家遇到界面假卡的问题还是要注意一下自己的循环这边的问题

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值