#include<stdio.h>
#include <stdlib.h>
typedef struct _Tree
{
int nValue;
struct _Tree* pLeft;
struct _Tree* pRight;
}Tree; // 树的节点
void CreateTree(Tree* *tree)
{
(*tree) = (Tree*)malloc(sizeof(Tree));
(*tree)->nValue = 1;
(*tree)->pLeft = (Tree*)malloc(sizeof(Tree));
(*tree)->pLeft->nValue = 2;
(*tree)->pLeft->pLeft = (Tree*)malloc(sizeof(Tree));
(*tree)->pLeft->pLeft->nValue = 4;
(*tree)->pLeft->pLeft->pLeft = NULL;
(*tree)->pLeft->pLeft->pRight = NULL;
(*tree)->pLeft->pRight = (Tree*)malloc(sizeof(Tree));
(*tree)->pLeft->pRight->nValue = 5;
(*tree)->pLeft->pRight->pLeft = NULL;
(*tree)->pLeft->pRight->pRight = NULL;
(*tree)->pRight = (Tree*)malloc(sizeof(Tree));
(*tree)->pRight->nValue = 3;
(*tree)->pRight->pLeft = (Tree*)malloc(sizeof(Tree));
(*tree)->pRight->pLeft->nValue = 6;
(*tree)->pRight->pLeft->pLeft = NULL;
(*tree)->pRight->pLeft->pRight = NULL;
(*tree)->pRight->pRight = (Tree*)malloc(sizeof(Tree));
(*tree)->pRight->pRight->nValue = 7;
(*tree)->pRight->pRight->pLeft = NULL;
(*tree)->pRight->pRight->pRight = NULL;
}
typedef struct _Queue
{
Tree* pTree; // 装一个树的节点
struct _Queue* pNext;
}Queue;
void PushQueue(Queue** pHead,Queue** pEnd,Tree* tree) // 入队
{
Queue* temp = (Queue*)malloc(sizeof(Queue));
temp->pNext = NULL;
temp->pTree = tree;
// 把节点放到链表的尾部
if ( (*pHead) == NULL )
{
(*pHead) = temp;
(*pEnd) = temp;
}
else
{
(*pEnd)->pNext = temp;
(*pEnd) = temp;
}
}
Tree* PopQueue(Queue** pHead) // 出队 得到这个节点里装的东西
{
if (pHead == NULL || (*pHead) == NULL)
{
return NULL;
}
// 记住要删除的头
Queue* pDel = (*pHead);
(*pHead) = (*pHead)->pNext;
// 记住要删的的这个节点里装的东西
Tree* tree = pDel->pTree;
free(pDel);
pDel = NULL;
return tree;
}
void Ceng(Tree* tree)
{
if ( tree == NULL )
{
return;
}
Queue* pHead = NULL;
Queue* pEnd = NULL;
// 把 根节点放到队列
PushQueue(&pHead,&pEnd,tree);
while(pHead) // 不停在 队列里取节点
{
// 从队列 取出来一个节点
tree = PopQueue(&pHead);
// 输出根节点
printf("%d ",tree->nValue);
// 把这个节点 左右 放到 队列里
if (tree->pLeft)
{
PushQueue(&pHead,&pEnd,tree->pLeft);
}
if (tree->pRight)
{
PushQueue(&pHead,&pEnd,tree->pRight);
}
}
}
int main()
{
Tree* root = NULL;
CreateTree(&root);
Ceng(root);
system("pause");
return 0;
}