您的位置:首页 > 职场人生

面试题23:从上往下打印二叉树

2015-10-24 10:13 288 查看
#include<iostream>
#include<queue>
using namespace std;
struct Tree
{
int nValue;
Tree *pLeft;
Tree *pRight;
};

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;

}

void PrintFrontToBottom(Tree *root)
{
if(root == NULL)
{
return ;
}
queue<Tree *> queueTree;
queueTree.push(root);
while(queueTree.size())
{
Tree *temp = queueTree.front();
queueTree.pop();
cout<<temp->nValue<<" ";
if(temp->pLeft)
{
queueTree.push(temp->pLeft);
}
if(temp->pRight)
{
queueTree.push(temp->pRight);
}
}
}
struct Queue
{
Tree *tree;
Queue *pNext;
};
void PushQueue(Queue **pHead,Queue **pEnd,Tree *tree)
{
if(pHead == NULL || pEnd == NULL)
{
return ;
}
Queue *temp = new Queue;
temp->pNext = NULL;
temp->tree = tree;
if((*pHead) == NULL)
{
(*pHead) = temp;
}
else
{
(*pEnd)->pNext = temp;
}
(*pEnd) = temp;
}
Tree * PopQueue(Queue **pHead, Queue **pEnd)
{
if(pHead == NULL || pEnd == NULL || (*pHead) == NULL || (*pEnd) == NULL)
{
return NULL;
}
Queue *pDel = (*pHead);
Tree *tree = pDel->tree;
(*pHead) = (*pHead)->pNext;
delete pDel;
pDel = NULL;
return tree;
}
void Print(Tree *root)
{
Queue *pHead = NULL;
Queue *pEnd = NULL;
while(root)
{
cout<<root->nValue<<" ";
if(root->pLeft)
{
PushQueue(&pHead,&pEnd,root->pLeft);
}
if(root->pRight)
{
PushQueue(&pHead,&pEnd,root->pRight);
}
root = PopQueue(&pHead,&pEnd);
}
}

int main()
{
Tree *root = NULL;
CreateTree(&root);
PrintFrontToBottom(root);
cout<<endl;
Print(root);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: