列出叶节点(PAT3-2)
来源:互联网 发布:linux ftp查看文件 编辑:程序博客网 时间:2024/04/26 03:24
参考:http://www.patest.cn/contests/mooc-ds/03-2
问题:
Given a tree, you are supposed to list all the leaves in the order of top down, and left to right.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (<=10) which is the total number of nodes in the tree -- and hence the nodes are numbered from 0 to N-1. Then N lines follow, each corresponds to a node, and gives the indices of the left and right children of the node. If the child does not exist, a "-" will be put at the position. Any pair of children are separated by a space.
Output Specification:
For each test case, print in one line all the leaves' indices in the order of top down, and left to right. There must be exactly one space between any adjacent numbers, and no extra space at the end of the line.
Sample Input:(注意输入没有顺序,而且每一行是,子节点索引,例如 2 7 表示这个节点的左边子节点为第二行的节点(0 -),右边子节点为第七行的节点(4 6))81 -- -0 -2 7- -- -5 -4 6Sample Output:
4 1 5
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 16
typedef struct TNode{
struct TNode *left;
struct TNode * right;
int isFirst; //isRoot node
int data;
}TNode;
typedef struct Queue
{
TNode* node[MAXSIZE];
int top ,bottom;
int size;
}Queue;
Queue* initQueue(Queue* queue)
{
queue->top=queue->bottom=0; //开始都为0位置
queue->size=MAXSIZE;
//printf("bottom=%d\n",Queue->top);
return queue;
}
void push(Queue* queue, TNode* p)
{
queue->node[queue->bottom]=p;
queue->bottom++;
}
TNode* pop(Queue* queue) //p is a pointer to pointer ,nice design
{
TNode* ret=queue->node[queue->top];
queue->top++;
return ret;
}
bool isEmpty(Queue* queue){
if(queue->top==queue->bottom)
return true;
return false;
}
TNode * list[MAXSIZE];
TNode * inputTNode(TNode *bt)
{
if(bt==NULL)
bt=(TNode*)malloc(sizeof(TNode));
char s[3],u[3];
scanf("%s%s",u,s);
if(s[0]=='-')
bt->right=NULL;
else
{
bt->right=(TNode*)malloc(sizeof(TNode));
bt->right->data=atoi(s);
}
if(u[0]=='-')
bt->left=NULL;
else
{
bt->left=(TNode*)malloc(sizeof(TNode));
bt->left->data=atoi(u);
}
return bt;
}
TNode * initBTree()
{
TNode* bt=NULL;
int num,i;
scanf("%d",&num);
if(num==-1)
return NULL;
for(i=0;i<num;i++)
{
bt=(TNode*)malloc(sizeof(TNode));
list[i]=bt;
bt=inputTNode(bt);
}
for(i=0;i<num;i++)
{
TNode* bt=NULL;
bt=list[i];
//printf("bt value %d\n",bt->data);
if(bt->left)
{int tmp=bt->left->data;
bt->left=list[tmp];
bt->left->data=tmp;
printf("bt value %d\n",bt->left->data);
bt->left->isFirst=1;
}
if(bt->right)
{int tmp=bt->right->data;
bt->right=list[bt->right->data];
bt->right->data=tmp;
bt->right->isFirst=1;
printf("bt value %d\n",bt->right->data);
}
}
TNode* root=NULL;
for(i=0;i<num;i++)
{
root=list[i];
if(root->isFirst!=1) break;
}
return root;
}
int main(int argc, char* argv[])
{
// Queue.top=-1;
Queue queue;
Queue *q=&queue;
q=initQueue(q);
TNode * root=initBTree();
push(q,root);
int first=1;
while(!isEmpty(q))
{
TNode * tmp=pop(q);
if((tmp->right==NULL)&&(tmp->left==NULL))
{
if(first)
{
first=0;
printf("%d",tmp->data);
}
else
printf(" %d",tmp->data);
}
if(tmp->left)
push(q,tmp->left);
if(tmp->right)
push(q,tmp->right);
}
return 0;
}
- 列出叶节点(PAT3-2)
- pat3-05
- PAT3-06. 表达式转换
- Thinkphp的list_to_tree 实现无限级分类列出所有节点
- 层序(level-order)列出二叉树的节点
- Thinkphp的list_to_tree 实现无限级分类列出所有节点
- PAT3-08. 堆栈模拟队列
- PAT3-04 一元多项式的乘加
- PAT3-07中缀表达式 strtok_r()的使用
- PAT3-07. 求前缀表达式的值
- PAT3-09. 队列中的元素排序
- (2)JavaScript创建新节点及其节点文本代码
- iOS地图详解-节点2(总共两个节点)
- X3D视觉效果节点(2)
- ros:(2)ros节点
- java中正则表达式的使用(2)——列出百度搜索的前十项
- Swift - 使用PhotoKit获取照片2(列出所有相簿、并选择)
- 列出{1,2,,,,n}的所有子集
- 练手:康威生命游戏demo
- git的使用
- C/C++下修改字符串常量
- ElasticSearch路由哈希算法的实现
- 星际穿越与计算机程序的多维空间
- 列出叶节点(PAT3-2)
- 胡歌已发放姑姑也以鼓励了
- Leetcode的Pow(x, n) 与 sqrt(x)
- 后缀数组模板解析
- <a href="http://www.pianopro.cn">通州钢琴培训</a>
- linux静态库与动态库制作
- HashMap的存储结构及原理
- substring
- 浅谈我对IO流的了解 - 字符流