其它pta数据结构编程题请参见:pta

这次的编程作业要求从上到下,从左到右输出一棵树的叶子节点,即树的层序遍历,用队列的方式来实现。

注意enqueue和dequeue函数参数为Queue &q,而不是Queue q,即用引用的方式才能改变实参的值。

 #include <iostream>
using namespace std; struct Node
{
int left;
int right;
}; struct Queue
{
int data[];
int first = -;
int end = -;
int maxSize = ;
}; int buildTree(Node tree[]);
void enqueue(Queue &q, int i);
int dequeue(Queue &q);
bool empty(Queue q); int main()
{
Node tree1[];
int root = buildTree(tree1);
Queue q, leaves;
int t, cnt = ;
enqueue(q, root);
while (!empty(q))
{
t = dequeue(q);
if (tree1[t].left == - && tree1[t].right == -)
enqueue(leaves, t);
if (tree1[t].left != -) enqueue(q, tree1[t].left);
if (tree1[t].right != -) enqueue(q, tree1[t].right);
}
while (!empty(leaves))
{
if (cnt > ) cout << " ";
cout << dequeue(leaves);
cnt++;
}
return ;
} int buildTree(Node tree[])
{
int num, i, root = -;
char l, r;
cin >> num;
int judgeRoot[] = {};
for (i = ; i < num; i++)
{
cin >> l >> r;
if (l != '-')
{
tree[i].left = l - '';
judgeRoot[l - ''] = ;
}
else tree[i].left = -;
if (r != '-')
{
tree[i].right = r - '';
judgeRoot[r - ''] = ;
}
else tree[i].right = -;
}
for (i = ; i < num; i++)
{
if (judgeRoot[i] == ) root = i;
}
return root;
} void enqueue(Queue &q, int i)
{
q.end = (q.end + ) % ;
q.data[q.end] = i;
} int dequeue(Queue &q)
{
q.first = (q.first + ) % ;
return q.data[q.first];
} bool empty(Queue q)
{
return q.end == q.first;
}

pta 编程题7 List Leaves的更多相关文章

  1. pta 编程题20 旅游规划

    其它pta数据结构编程题请参见:pta 题目 这个最短路径问题只需要求两点之间的最短路径,因而在Dijikstra算法中当求出目标点的最短路径之后跳出循环即可. #include <iostre ...

  2. pta 编程题21 公路村村通

    其它pta数据结构编程题请参见:pta 题目 这道题考察最小生成树问题,用的是Prim算法. 和Dijkstra算法相比,没有了collect数组,因为dist[v] == 0就代表v被已收录. #i ...

  3. pta编程题19 Saving James Bond 2

    其它pta数据结构编程题请参见:pta 题目 和简单版本不同的是,简单版本只需判断能否到达岸边,而这个版本要求求出最少跳数的路径. 简单版本用dfs实现,而这道题用BFS实现. 注意: 岛半径为7.5 ...

  4. pta 编程题16 Saving James Bond - Easy Version

    其它pta数据结构编程题请参见:pta 题目 主要用到了深度优先搜索. #include <iostream> using namespace std; struct Vertex { i ...

  5. pta 编程题15 列出连通集

    其它pta数据结构编程题请参见:pta 题目 题目要求分别以深度优先搜索和广度优先搜索输出图的连通集. 广度优先搜索要用到队列,先回顾一下循环队列: struct QNode { int* Data; ...

  6. pta 编程题14 Huffman Codes

    其它pta数据结构编程题请参见:pta 题目 题目给出一组字母和每个字母的频数,因为哈夫曼编码不唯一,然后给出几组编码,因为哈夫曼编码不唯一,所以让你判断这些编码是否符合是哈夫曼编码的一种. 解题思路 ...

  7. pta 编程题13 File Transfer

    其它pta数据结构编程题请参见:pta 这道题考察的是union-find并查集. 开始把数组中每个元素初始化为-1,代表没有父节点.为了使树更加平衡,可以让每一个连通分量的树根的负值代表这个连通分量 ...

  8. pta 编程题12 堆中的路径

    其它pta数据结构编程题请参见:pta 这道题考察的是最小堆. 堆是一个完全二叉树,因此可用数组表示,一个下标为 i 的结点的父节点下标为 i / 2,子结点下标为 2i 和 2i + 1. 插入元素 ...

  9. pta 编程题10 Root of AVL Tree

    其它pta数据结构编程题请参见:pta 这道题考察平衡二叉查找树的插入. 为了保证二叉查找树的平衡,当一个结点的左右子树的高度差大于1时就要进行调整. 分为以下四种情况: 插入新节点后,以及旋转之后, ...

随机推荐

  1. Spring第一天:Spring的概述、SpringIOC入门(XML)、Spring的Bean管理、Spring属性注入

    记得引入约束 上图路径. 此时 只需修改配置文件 便可以随意更换实现类 无需修改代码. 传统方法必须用实现类(不面向接口了)来调用方法设置属性. 而在Spring中:在创建类的过程中发现实现类有nam ...

  2. Codeforces Round #524 (Div. 2) D(思维,构造)

    #include<bits/stdc++.h>using namespace std;long long dp[107];int main(){    int cnt=1;    dp[1 ...

  3. svn图标修复

    https://blog.csdn.net/doubleface999/article/details/55798736 前一阵用上了win8,装了最新版本的Tortoise SVN,但发现文件夹和文 ...

  4. Oracle 12c登陆sys用户的方法

    本机安装过oracle 12c之后,发现用sql plus执行命令conn sys/change_on_install as sysdba; 提示如下图: 后在网上搜索此问题,需要先登陆system账 ...

  5. 2014-11-3 NOIP模拟赛2

    NOIP 2014 水题模拟赛 (请选手务必仔细阅读本页内容) 一.题目概况 中文题目名称 数列 刷漆 排队 英文题目与子目录名 seq paint layout 可执行文件名 seq paint l ...

  6. jdk的卸载

    问题描述: win10环境安装了jdk1.7&jdk1.8&jdk1.9 jdk1.9安装后,设置jdk1.9安装目录为JAVA_HOME.后来JAVA_HOME切换jdk1.8环境变 ...

  7. react native ios打包,即生产包

    参考文章:http://www.devio.org/2017/02/09/React-Native%E5%8F%91%E5%B8%83APP%E4%B9%8B%E6%89%93%E5%8C%85iOS ...

  8. CentOS 6.6 x64安装TensorFlow

    CentOS 6.6 x64安装TensorFlow升级Python到2.7(系统自带Python版本为2.6) // 安装编译工具 $ yum -y install gcc automake aut ...

  9. Tensorflow安装教程-Win10环境下

    背景:最新版的Tensoflow已经支持Python3.6 首先,下载并安装Anaconda3 内置Python3.6的版本 https://www.continuum.io/downloads 安装 ...

  10. Django-- CRM1客户建表与装饰器

    一.CRM项目(1) 引入三个表:用户表,客户表,校区表,班级表,梳理逻辑关系并迁移数据库,生成表. 使用admin插入数据,admin是Django提供的web形式的后台数据管理页面,它是和用户认证 ...