博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Uva 839天平(二叉树dfs, 递归建树)
阅读量:5010 次
发布时间:2019-06-12

本文共 1404 字,大约阅读时间需要 4 分钟。

题意:

给定一个天平长度 输入格式为

wl dl wr dr 

分别代表天平左边长度,左边重量, 右边长度, 右边重量。

如果重量为0, 说明下面还有一个天平, 递归给出。

样例输入:

1
0 2 0 4
0 3 0 1
1 1 1 1
2 4 4 2
1 6 3 2

如果天平是左右重量相等的 输出YES 否则输出NO。

分析:

既然以递归的定义输入, 那么我们程序最好写成递归建树,如果有重量是0, 那么就递归建左子树或者右子树 , 如果是叶子节点的父节点(这个天平下面没天平), 那么就判断左右是否相等返回即可(也可建一个全局变量, 一个不满足就可以输出NO了)。 我的程序是把树建造出来再判断, 有点冗余。

#include 
using namespace std;const int maxn = 1e6;struct Node{ int wl,dl,wr,dr; int left, right; Node():wl(0),dl(0),wr(0),dr(0){}};Node tree[maxn];const int root = 1;int cnt = 0, ok;int build(int u){ int wl,dl,dr,wr; scanf("%d %d %d %d",&wl,&dl,&wr,&dr); tree[u].wl = wl; tree[u].dl = dl; tree[u].wr = wr; tree[u].dr = dr; if(!wl) { tree[u].left = ++cnt; build(cnt); } if(!wr) { tree[u].right = ++cnt; build(cnt); }}int post(int u){ if(!tree[u].wl) { tree[u].wl = post(tree[u].left); } if(!tree[u].wr) { tree[u].wr = post(tree[u].right); } if(tree[u].wl * tree[u].dl != tree[u].wr * tree[u].dr) ok = 0; return tree[u].wl + tree[u].wr;}int main(){ int T; scanf("%d", &T); int flag = 0; while(T--){ if(!flag){ flag = 1; } else printf("\n"); cnt = root; build(root); ok = 1; post(root); printf("%s\n",ok ? "YES":"NO"); } return 0;}

 

转载于:https://www.cnblogs.com/Jadon97/p/7205082.html

你可能感兴趣的文章
打印Ibatis最终的SQL语句
查看>>
HBase之八--(3):Hbase 布隆过滤器BloomFilter介绍
查看>>
oracle连接问题ORA-00604,ORA-12705
查看>>
NOI 2019 退役记
查看>>
java的几个日志框架log4j、logback、common-logging
查看>>
Java从零开始学十三(封装)
查看>>
文字笔记
查看>>
shell获取目录下(包括子目录)所有文件名、路径、文件大小
查看>>
Python2和Python3中的rang()不同之点
查看>>
MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)...
查看>>
UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
查看>>
记忆--1.致我们不可缺少的记忆
查看>>
lintcode28- Search a 2D Matrix- easy
查看>>
react项目
查看>>
C# 万年历 农历 节气 节日 星座 星宿 属相 生肖 闰年月 时辰(转)
查看>>
A Simple Tree Problem
查看>>
Modular Inverse [ZOJ 3609]
查看>>
MySQL性能测试工具之mysqlslap使用详解
查看>>
深入理解jsonp跨域请求原理
查看>>
regsvr32注册COM组件失败
查看>>