首页 > 代码库 > 【剑指offer】从上向下打印二叉树
【剑指offer】从上向下打印二叉树
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26089165
剑指offer上的第23题,实际上就是考察二叉树的层序遍历,具体思想可以参考这里。
- 题目描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 输入:
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, :n代表将要输入的二叉树元素的个数(节点从1开始编号)。接下来一行有n个数字,代表第i个二叉树节点的元素的值。接下来有n行,每行有一个字母Ci。
Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。
Ci=’l’表示第i个节点有一个左孩子,紧接着是左孩子的编号。
Ci=’r’表示第i个节点有一个右孩子,紧接着是右孩子的编号。
Ci=’z’表示第i个节点没有子孩子。
- 输出:
对应每个测试案例,
按照从上之下,从左至右打印出二叉树节点的值。
- 样例输入:
7 8 6 5 7 10 9 11 d 2 5 d 3 4 z z d 6 7 z z
- 样例输出:
8 6 10 5 7 9 11
#include<stdio.h> #include<stdlib.h> #include<stdbool.h> /* 二叉树的存储结构 */ typedef struct BTNode { int data; int rchild; int lchild; }BTNode; /* 队列的存储结构 */ typedef struct Node { BTNode data; struct Node *pNext; }NODE,*PNODE; typedef struct Queue { PNODE front; //队头指针 PNODE rear; //队尾指针 }QUEUE,*PQUEUE; /* 创建一个空队列,队头指针和队尾指针都指向头结点, 头结点中不存放数据,只存放指针 */ PQUEUE create_queue() { PQUEUE pS = (PQUEUE)malloc(sizeof(QUEUE)); pS->front = (PNODE)malloc(sizeof(NODE)); if(!pS || !pS->front) { printf("pS or front malloc failed!!"); exit(-1); } else { pS->rear = pS->front; pS->front->pNext = NULL; } return pS; } /* 判断队列是否为空 */ bool is_empty(PQUEUE pS) { if(pS->front == pS->rear) return true; else return false; } /* 进队函数,从队尾进队,队头指针保持不变 */ void en_queue(PQUEUE pS, BTNode e) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); if(!pNew) { printf("pNew malloc failed"); exit(-1); } else { pNew->data = http://www.mamicode.com/e;>/**************************************************************
Problem: 1523
User: mmc_maodun
Language: C
Result: Accepted
Time:0 ms
Memory:916 kb
****************************************************************/
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。