二叉树的创建

二叉树的层序创建

创建步骤

概括:队列里面出一个元素,输入两个元素作为这个元素的左右结点,然后将这两个元素中不为0的元素接着入队列

  1. 先输入第一个数据,如果第一个数据为0,返回NULL,表示这棵树为空,若不为0,分配一个结点,同时将该结点放进队列中
  2. 若队列不为空,从队列中取出一个地址,并建立这个地址(A)的左右孩子
  3. 读入一个数据(A左孩子的数据),如果这个数据为0,则另(A)左孩子的地址为NULL。若不为0,先将这个结点作为(A)的左孩子,并将这个结点的地址入队列
  4. 再读入一个数据(A右孩子的数据),如果这个数据为0,则另(A)右孩子的地址为NULL。若不为0,先将这个结点作为(A)的右孩子,并将这个结点的地址入队列

typedef struct TNode BinTree;
typedef int ElemenType;
#define NoInfo 0

struct TNode{
	ElemenType Data;
	BinTree Left;
	BinTree Right;
};

BinTree CreatBinTree()
{
	ElemenType Data;
	BinTree BT;//表示跟结点的地址 
	BinTree T;//访问左右结点 
	Queue Q=CreatQueue();
	
	
	scanf("%d",&Data);
	if(Data!=NoInfo)//判断根结点是否存在
	{
		BT=(BinTree)malloc(sizeof(struct TNode));
		BT->Data=Data;
		BT->Left=NULL;
		BT->Right=NULL;
		Add(BT,Q);//将根结点的地址入队 
	}
	else
	return NULL;//跟结点不存在 
	
	
	while(!IsEmpty(Q))
	{
		T=Delete(Q);//出队一个元素的地址 ,然后扫描两个元素 
		
		scanf("%d",&Data);//左结点 
		if(Data==NoInfo)
		T->Left=NULL;
		else
		{
			T->Left=(BinTree)malloc(sizeof(struct TNode));
			T->Left->Data=Data;
			T->Left->Left=T->Left->Right=NULL;
			Add(T->Left,Q);
		}
		
		scanf("%d",&Data);//右结点 
		if(Data==NoInfo)
		T->Right=NULL;
		else
		{
			T->Right=(BinTree)malloc(sizeof(struct TNode));
			T->Right->Data=Data;
			T->Right->Right=T->Right->Left=NULL;
			Add(T->Right,Q);//将结点入队 
		}
	}
	
	return BT;//返回跟结点的地址 
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值