面试题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; }
相关文章推荐
- 如果你身边有程序员 今天对他好一点
- Android程序员的一些面试建议
- 黑马程序员_JavaIO流(二)
- HashTable-HashMap(Android,Java最常见面试题)
- 庆祝程序员节,入驻杭州云栖小镇
- C#程序员经常用到的10个实用代码片段
- (九)黑马程序员——oc基础之分类与协议
- EMBA提前面试准备技巧
- (八)黑马程序员——Foundation框架之NSString的常用方法
- 月薪3万的程序员都避开了哪些坑
- ——黑马程序员——编程老手与高手的误区
- “异或”处理数组的相关算法的面试题
- 如果你身边有程序员 今天对他好一点
- 程序员应该怎样去学习和掌握计算机英语呢?
- JAVA异常架构图及面试题
- 面试题7:用两个栈实现队列
- 【程序员眼中的统计学(9)】总体和样本的估计:进行预测
- 关于java异常处理的面试题
- 黑马程序员—————— Java集合框架Collection
- 2.有人认为,“中文编程”是解决中国程序员编程效率的秘密武器,请问它是一个“银弹”么?