当前位置:网站首页>C语言实现树的底层遍历--超简代码

C语言实现树的底层遍历--超简代码

2022-08-03 06:34:00 干饭小白

//对树进行底层遍历时使用了队列的结构

基础类型:
typedef enum {FALSE = 0,TRUE = 1} Bool;
typedef enum {VOERFLOW = -2,UNDERFLOW = -1, ERROR = 0,OK = 1} Status;

树的二叉链表结点定义:
typedef struct Node{
	char data;
	struct Node *firstchild,*nextbrother;
}Node,*TreeNode;

//实现队列基本操作的函数原型表
void InitQueue(Queue *Q);				//初始化队列
Bool IsEmpty(Queue Q);					//判断队列是否为空,若是则返回TRUE,否则返回FALSE
void EnQueue(Queue *Q,TreeNode p);		//元素入队列
void DeQueue(Queue *Q,TreeNode *p);		//元素出队列

//函数代码
Status LevelTraverser(TreeNode root)
{
	/*层序遍历树,树采用孩子-兄弟表示法,root是树根结点的指针*/
	Queue tmpQ;
	TreeNode ptr,brotherptr;
	
	if( !root )
		return ERROR;
	
	InitQueue(&tmpQ);
	EnQueue(tmpQ,root);
	brotherptr = root->nextbrother;
	
	while(brotherptr)
	{
		EnQueue(&tmpQ,brotherptr);		
		brotherptr=brotherptr->nextbrother;
	}
	while(!IsEmpty(tmpQ))
	{
		DeQueue(&tmpQ,&ptr);
		printf("%c\t",ptr->data);
		
		if(!ptr->firstchild) continue;
		EnQueue(&tmpQ,ptr->firstchild);
		brotherptr =ptr->brotherptr->nextbrother;
		
	while(brotherptr)
	{
			EnQueue(&tmpQ,brotherptr);
			brotherptr = brotherptr->nextbrother;
	}
	}
	return OK;
}

原网站

版权声明
本文为[干饭小白]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_46120107/article/details/120809151