树的广度遍历

在二叉树的遍历当中,有一种遍历方法是不常见的,那就是广度遍历。和其他三种遍历方法不同,二叉树的广度遍历需要额外的数据结构来帮助一下?什么数据结构呢?那就是队列。因为队列具有先进先出的特点,这个特点要求我们在遍历新的一层数据之前,必须对上一次的数据全部遍历结束。暂时还没有掌握队列知识的朋友可以看一看我的这一篇博客—队列。原文

//树的节点
typedef struct TREE_NODE
{
	int data;
	struct TREE_NODE*lchild,*rchild;
}TREE_NODE



//队列数据结构,pHead表示指针的起始地址
typedef struct _QUEUE
{
	int head;
	int tail;
	int length;
	TREE_NODE**pHead;
}QUEUE;

//创建队列

QUEUE* create_queue_for_tree(const TREE_NODE*pTreeNode)
{
	QUEUE* pQueue;
    int count; //记录节点个数,即树的节点个数
	if(NULL==pTreeNode)
		return NULL;
	count=count_all_node_number(pTreeNode);
	pQueue=(QUEUE*)malloc(sizeof(QUEUE));
	assert(NULL!=pQueue);
	memset(pQueue,0,sizeof(QUEUE));
    pQueue->pHead=(TREE_NODE**)malloc(sizeof(TREE_NODE*)*count);
	assert(NULL!=pQueue->pHead);
	memset(pQueue->pHead,0,sizeof(TREE_NODE*)*count);
    pQueue->head=pQueue->tail=0;
	pQueue->length=count;
    return pQueue;
}

//实现队列的数据加入和数据弹出操作
void insert_node_into_queue(QUEUE*pQueue,TREE_NODE*pNode)
{s
	if(NULL==pQueue || NULL==pQueue->pHead ||NULL==pNode)
		return;
    pQueue->pHead[pQueue->tail++]=pNode;
	    return;
}

TREE_NODE* get_node_from_queue(QUEUE* pQueue)
{
	if(NULL==pQueue || NULL==pQueue->pHead)
		return NULL;
	if(pQueue->head==pQueue->tail)
		return NULL;
    return pQueue->pHead[pQueue->head++];
}
s

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值