03-树2 List Leaves(25)
题目

分析
输入先给出结点的数量,把结点从0开始标号,每一行给出结点的左右两个子节点,-表示子节点不存在。
很容易分析出在子节点中没有出现的就是根节点,两个子节点都为空的是叶子节点
先建树,然后从root结点广度优先搜索,搜索到叶子节点就搜索,需要注意的是因为要求输出的顺序是从上到下、从左到右,因此如果左右子节点都不为空则应先push左子节点。

AC代码
#include "bits/stdc++.h"
using namespace std;
struct TreeNode
{
	int left, right;
}tree[14];
int main() {
	int n, i;
	cin >> n;
	string l, r;
	bool isRoot[14];
	memset(isRoot, 1, sizeof(isRoot));
	for (i = 0; i < n; i++) {
		cin >> l >> r;
		if (l[0] != '-') {
			tree[i].left = stoi(l);
			isRoot[tree[i].left] = 0;
		}
		else
			tree[i].left = -1;
		if (r[0] != '-') {
			tree[i].right = stoi(r);
			isRoot[tree[i].right] = 0;
		}
		else
			tree[i].right = -1;
	}
	//找到根结点
	int root;
	for (i = 0; i < n; i++) {
		if (isRoot[i]) root = i;
	}
	//cout << "根节点: " << root << endl;
	queue<int> q;
	q.push(root);
	vector<int> v;
	while (!q.empty()) {
		int t = q.front();
		//cout << t << ' ';
		q.pop();
		if (tree[t].left == -1 && tree[t].right == -1)
			v.push_back(t);
		if (tree[t].left != -1)
			q.push(tree[t].left);
		if (tree[t].right != -1)
			q.push(tree[t].right);
	}
	//cout << endl;
	for (i = 0; i < v.size(); i++) {
		cout << v[i];
		if (i != v.size() - 1)
			cout << ' ';
	}
	return 0;
}
03-树2 List Leaves(25)的更多相关文章
- 03-树2. List Leaves (25) 二叉树的层序遍历
		03-树2. List Leaves (25) 题目来源:http://www.patest.cn/contests/mooc-ds/03-%E6%A0%912 Given a tree, you a ... 
- L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)
		题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ... 
- pat03-树2. List Leaves (25)
		03-树2. List Leaves (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Given a t ... 
- 03-树1 树的同构(25 point(s)) 【Tree】
		03-树1 树的同构(25 point(s)) 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为 ... 
- PTA 03-树2 List Leaves   (25分)
		题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/666 5-4 List Leaves (25分) Given a tree, you ... 
- 03-树1. List Leaves (25)
		Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. I ... 
- 7-4 List Leaves (25分) JAVA
		Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. I ... 
- L2-006 树的遍历 (25 分)
		链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 题目: 给定一棵二叉树的后序遍历和中序 ... 
- 03-树2 List Leaves (25 分)
		Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. I ... 
- 浙大数据结构课后习题 练习三 7-4 List Leaves (25 分)
		Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. I ... 
随机推荐
- 2017年蓝桥杯省赛A组c++第5题(递归算法填空)
			/* 由 A,B,C 这3个字母就可以组成许多串. 比如:"A","AB","ABC","ABA","AACB ... 
- [daily][samba] smbclient使用
			用的也不是太明白,反正凑合用吧. 在用之前,只得到了两个信息,1:ip 192.168.30.9. 2:可以免密登录. 1. 用这个命令看一看,主要是找到这个目录:Anonymous ┬─[t ... 
- Flink - FlinkKafkaProducer010
			https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/connectors/kafka.html 使用的方式, DataStr ... 
- 《linux 字符处理》- grep/sort/uniq/tr/paste
			一:基本 字符处理主要是文本的搜索和处理. 搜索也主要使用到了 管道 作为媒介. 二: grep 搜索文本 基本语法 * grep [-incv] ’文本’ 文件 * i 不区分大小写 * c 匹配行 ... 
- Python库源码学习1:Flask之app.run
			先列出app.run()实现的功能,我们以debug=True的情况下进行分析. 1. web服务器,处理http请求 2. 当代码修改后,重启服务器 那么app.run()是如何实现这两个功能的呢? ... 
- MySQL InnoDB加锁超时回滚机制(转)
			add by zhj: 看来我对MySQL的理解还有待深入,水还是挺深的啊,MySQL给记录加锁时,可以通过innodb_lock_wait_timeout参数设置超时时间, 如果加锁等待超过这个时间 ... 
- pymysql 模块 使用目录
			mysql python pymysql模块 基本使用 mysql python pymysql模块 增删改查 插入数据 介绍 commit() execute() executemany() 函数 ... 
- CentOS 7.2编译安装nginx1.10.3+MySQL5.5.38+PHP5.5.38
			1.关闭firewallad 关闭防火墙 systemctl stop firewalld.service 禁止firewall开机启动 systemctl disable firewalld.ser ... 
- RN 获取地理位置
			代码: export default class GeolocationView extends Component { watchID: number; constructor(props){ su ... 
- redgate的mysql架构比较和数据比较工具
			redgate的mysql架构比较和数据比较工具 最近线上数据需要进行架构比较,比较两个服务器上的mysql实例上数据库的架构 数据比较可以用percona的pt-table-checksum和pt- ... 
