#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 Push(Queue** pHead,Queue** pEnd,Tree* tree) // 把 树的节点放到 队列
{
if (pHead == NULL || pEnd == NULL)
{
return;
}
Queue* temp = (Queue*)malloc(sizeof(Queue));
temp->pTree = tree;
temp->pNext = NULL;
if (!(*pHead))
{
(*pHead) = temp;
(*pEnd) = temp;
}
else
{
(*pEnd)->pNext = temp;
(*pEnd) = temp;
}
}
Tree* Pop(Queue** pHead,Queue** pEnd) // 出队 得到 这个节点里装的东西
{
if (pHead == NULL || pEnd == NULL || *pHead == NULL)
{
return NULL;
}
else
{
Tree* tree = (*pHead)->pTree;
Queue* pDel = (*pHead);
// 看 是不是 就一个节点
if ((*pHead)->pNext == NULL)
{
(*pEnd) = NULL;
}
(*pHead) = (*pHead)->pNext;
free(pDel);
pDel = NULL;
return tree;
}
}
void WidePrint(Tree* tree)
{
Queue* pHead = NULL;
Queue* pEnd = NULL;
while(tree != NULL)
{
printf("%d ",tree->nValue);
// 看这个节点有没有左右
if(tree->pLeft)
Push(&pHead,&pEnd,tree->pLeft);
if(tree->pRight)
Push(&pHead,&pEnd,tree->pRight);
// 出队
tree = Pop(&pHead,&pEnd);
}
//if (tree == NULL)
//{
// return;
//}
//
//Queue* pHead = NULL;
//Queue* pEnd = NULL;
//Push(&pHead,&pEnd,tree);
//while(pHead != NULL)
//{
// // 出队
// tree = Pop(&pHead,&pEnd);
// printf("%d ",tree->nValue);
// // 看这个节点有没有左右
// if(tree->pLeft)
// Push(&pHead,&pEnd,tree->pLeft);
// if(tree->pRight)
// Push(&pHead,&pEnd,tree->pRight);
//}
}
int main()
{
Tree* root = NULL;
CreateTree(&root);
WidePrint(root);
system("pause");
return 0;
}