实现按层次遍历二叉树

实现按层次遍历二叉树 

主要代码:

void sequence(blink bt)
{
	queue<blink> s;
	s.push(bt);
	while(s.empty() == 0)//该函数返回0说明不为空(为空 会返回1) 
	{
		printf("%c",s.front()->data);//打印 将出队结点 的元素值 
		s.push(s.front()->lchild);   //左孩子 进队 
		s.push(s.front()->rchild);   //右孩子 进队 
		
		s.pop();//该元素 处理完毕,出队
		
	}
	
	return;
}

/*test 输入样式:124##3##76##8##  ( #为结束符号,不看#则是 按照 先序序列录入) 

          1
       2    7 
    4   3  6  8

层次遍历结果:1274368 
*/

完整代码:

/*
实现按层次遍历二叉树 
*/

#include "stdio.h"//包含 getchar() scanf() printf() 
#include "malloc.h"//malloc()动态申请空间 函数
#include <queue>   //包含队列函数 
using namespace std;//std空间,包含<queue>库 
//二叉树 结点 
struct node{
	char data;
	struct node *lchild,*rchild;
}bnode;

typedef struct node * blink;


//先序 建立 二叉数 
blink create_binary()
{
    blink bt;
    char ch;
    ch = getchar();
    if (ch == '#')
    {
        bt = NULL;
    }
    else
    {
        bt = (blink)malloc(sizeof(bnode));
        
        bt->data = ch;
        bt->lchild = NULL;
        bt->rchild = NULL;
        bt->lchild = create_binary();
        bt->rchild = create_binary();
        
    }
    
    /*   输入*-4##5##+1##2## 
    
				    	*
				    -       +
				4     5   1    2
    */
    return bt;
}

blink FreeTree(blink T)
{
	if(T)
	{
		FreeTree(T->lchild);            //递归释放其左子树 
		FreeTree(T->rchild);           //递归释放其右子树 
		
		free(T);                      //释放根节点 
		T = NULL;                     //释放指向根节点的指针 
	}
	
	return T;           //返回释放后的根节点NULL 便于释放 

}


/*test 输入样式:124##3##76##8##  ( #为结束符号,不看#则是 按照 先序序列录入) 

		  1
	   2    7 
	4   3  6  8

层次遍历结果:1274368 
*/

void sequence(blink bt)
{
	queue<blink> s;
	s.push(bt);
	while(s.empty() == 0)//该函数返回0说明不为空(为空 会返回1) 
	{
		printf("%c",s.front()->data);//打印 将出队结点 的元素值 
		s.push(s.front()->lchild);   //左孩子 进队 
		s.push(s.front()->rchild);   //右孩子 进队 
		
		s.pop();//该元素 处理完毕,出队
		
	}
	
	return;
}

int main()
{
	blink root = NULL;//根 结点

	//建树
	root = create_binary(); 
	//遍历 
	printf("层次遍历  二叉树\n");
	sequence(root);//层次遍历  二叉树 
	printf("\n");
	
	//free 
	free(FreeTree(root));//释放 空间
	 
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_47991812/article/details/121408839