【剑指offer】面试题23:从上往下打印二叉树
来源:互联网 发布:足球赌球什么软件 编辑:程序博客网 时间:2024/05/16 07:39
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
题目解析:
其实就是层序遍历,先遍历完第一层,再遍历完第二层……这时,就要用到数据结构队列:先将根节点入队列,然后出队列,访问节点,将左右子节点入队列,依次循环即可层序访问所有节点。
小的细节:
由于放入队列的是二叉树的节点信息,也就是一个结构体,因此队列要用链表的形式来表示。在二叉树的节点中加入next指针。(不过题目中给的结构体已经确定,是因为在c++中,队列已经建立好,不用构造队列的细节)。为了方便表示空队列,我们需要引入头结点。
完整代码如下:
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 100typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild; struct BiTNode *next; //为了在队列里面应用}BiTNode,*BiTree;typedef struct{ BiTNode *front,*rear;}SQueue;void LevelOrderTraverse(BiTree *T,SQueue *Q);void InitQueue(SQueue *Q);void CreateBiTree(BiTree *T);int EnQueue(SQueue *Q,BiTree *T);int DeQueue(SQueue *Q,BiTree *T);int Empty(SQueue Q);int main(void){ int n; SQueue queue; BiTree head; printf("input n to continue:"); while(scanf("%d",&n) == 1){ InitQueue(&queue); CreateBiTree(&head); LevelOrderTraverse(&head,&queue); printf("\ninput n to continue:"); } return 0;}void InitQueue(SQueue *Q){ Q->front = Q->rear = (BiTNode *)malloc(sizeof(BiTNode)); if(!Q->front) exit(-1);}void CreateBiTree(BiTree *T){ int data; scanf("%d",&data); if(data == 0){ *T = NULL; }else{ *T = (BiTNode *)malloc(sizeof(BiTNode)); if(!*T) exit(-1); (*T)->data = data; CreateBiTree(&((*T)->lchild)); CreateBiTree(&((*T)->rchild)); }}int EnQueue(SQueue *Q,BiTree *T){ if(*T){ Q->rear->next = *T; (*T)->next = NULL; Q->rear = *T; return 1; } return 0;}int DeQueue(SQueue *Q,BiTree *T){ if(Q->rear == Q->front) return 0; *T = Q->front->next; if(Q->front->next == Q->rear) //注意处理队列为空时的情况 Q->rear = Q->front; Q->front->next = (*T)->next; return 1;}int Empty(SQueue Q){ if(Q.front == Q.rear) return 1; return 0;}void LevelOrderTraverse(BiTree *T,SQueue *Q){ BiTree p; if(!T) return ; EnQueue(Q,T); //先将根节点入队列,然后出队列的时候再打印节点信息 while(!Empty(*Q)){ DeQueue(Q,&p); printf("%d ",p->data); EnQueue(Q,&(p->lchild)); EnQueue(Q,&(p->rchild)); }}
0 0
- 剑指offer面试题 从上往下打印二叉树
- 剑指offer面试题[23]-从上往下打印二叉树(按层序打印)
- [剑指offer][面试题23]从上往下打印二叉树
- 【剑指offer】面试题23:从上往下打印二叉树
- 《剑指offer》面试题23从上往下打印二叉树
- 剑指Offer:面试题23 从上往下打印二叉树
- 剑指offer 面试题23—从上往下打印二叉树
- 《剑指Offer》学习笔记--面试题23:从上往下打印二叉树
- 剑指offer--面试题23:从上往下打印二叉树--Java实现
- 【剑指Offer学习】【面试题23:从上往下打印二叉树】
- 剑指Offer面试题23(Java版):从上往下打印二叉树
- 剑指offer面试题23-从上往下打印二叉树
- 剑指offer代码解析——面试题23从上往下打印二叉树
- 剑指offer-面试题23:从上往下打印二叉树
- 剑指offer之面试题23:从上往下打印二叉树
- 剑指Offer----面试题23:从上往下打印二叉树(层序遍历)
- 剑指Offer:面试题23——从上往下打印二叉树(java实现)
- 剑指offer 面试题23 从上往下打印二叉树 Java实现
- TextBlock控件全攻略
- 武汉的雾霾真心恐怖
- 正是看准在线英语未来发展趋势之后的明智选择
- linux中硬链接与软链接
- mysql 用户权限
- 【剑指offer】面试题23:从上往下打印二叉树
- windows程序调试,转自谭文
- SQL Server中数据库文件的存放方式,文件和文件组
- springMVC多数据源使用 跨库跨连接
- git
- Redis复习笔记3—Redis配置与调优
- http://codeforces.com/contest/432/problem/D
- 如何重用这个代码(点击关闭按钮最小化到系统托盘)?
- JavaScript 在字符串中替换某个位置的字符