二叉树的路径 (25 分)

二叉树是一种普通的数据结构。给出一棵无限的二叉树,节点被标识为一对整数,构造如下:
    (1)树根被标识为整数对(1,1)。
    (2)如果一个节点被标识为(a,b),那么其左子树树根被标识为(a+b,b),其右子树树根被标识为(a,a+b)。
    给出上述二叉树的某个节点标识(a,b),假定从树根到这一给定的节点是沿着最短的路径走,你能给出多少次要向左子树走,多少次要向右子树走?

输入格式:

第一行给出测试用例个数。每个测试用例占一行,由两个整数i和j组成(1<=i, j<=2*109),表示节点的标识(i,j)。假定给出的节点都是有效的节点。

输出格式:

对每个测试用例,第一行为“Scenario #i:”,其中i是测试用例编号,从1开始编号;然后输出一行给出两个整数l和r,中间用1个空格隔开,其中l是从树根到该节点要向左子树走的次数,r是从树根到该节点要向右子树走的次数。在每个测试用例结束后输出一个空行。

输入样例:

3

53 6

7 8

27 95

输出样例:

Scenario #1:

12 1

Scenario #2:

6 1

Scenario #3:

13 4

题意:题目上说了好多,其实就是从(1,1)往下找,找到到(i,j)的最短路径,输出要走多少次左子树,多少次右子树。

一开始我看到最短路径,我第一想到的就是bfs去写,写完之后交了一发,有一组数据内存超限(我是从(1,1)开始往下找)。然后我就改进了一下算法,用逆向思维,反着搜,就没有内存超限了,但是时间超限了(哭笑)......之后,我就仔细的想了一想,找了一个规律,原来这是一个思维题,压根就不是什么搜索题,就是用除法去做,很水...虽然我WA了几次。

#include<iostream>
#include<cstdio>
#include<queue> using namespace std; int main()
{
int n,x,y,p=,l,r;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&x,&y);
l=r=; //l表示要经过左子树的数量,r表示要经过右子树的数量
while(x!=||y!=)
{
if(x>y)
{
if(y==)
l+=x-,x=; //当y为1时,x就只要走x-1步就能变成1了,记住要把x赋为1(跳出的条件所需)
else
l+=x/y,x%=y; //当两个数都不为1时,将其的商加入l中,x的值需要改变成x%y的余数
}
else if(x<y)
{
if(x==)
r+=y-,y=; //同上
else
r+=y/x,y%=x; //同上
}
}
printf("Scenario #%d:\n%d %d\n\n",p++,l,r);
}
return ;
}

PTA 二叉树路径的更多相关文章

  1. [LeetCode] Path Sum II 二叉树路径之和之二

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  2. [LeetCode] 113. Path Sum II 二叉树路径之和之二

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  3. [LeetCode] Binary Tree Paths 二叉树路径

    Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 ...

  4. PAT树_层序遍历叶节点、中序建树后序输出、AVL树的根、二叉树路径存在性判定、奇妙的完全二叉搜索树、最小堆路径、文件路由

    03-树1. List Leaves (25) Given a tree, you are supposed to list all the leaves in the order of top do ...

  5. LeetCode 257. Binary Tree Paths (二叉树路径)

    Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 ...

  6. [leetcode]257. Binary Tree Paths二叉树路径

    Given a binary tree, return all root-to-leaf paths. Note: A leaf is a node with no children. Example ...

  7. UVA 548.Tree-fgets()函数读入字符串+二叉树(中序+后序遍历还原二叉树)+DFS or BFS(二叉树路径最小值并且相同路径值叶子节点权值最小)

    Tree UVA - 548 题意就是多次读入两个序列,第一个是中序遍历的,第二个是后序遍历的.还原二叉树,然后从根节点走到叶子节点,找路径权值和最小的,如果有相同权值的就找叶子节点权值最小的. 最后 ...

  8. [LeetCode] 257. Binary Tree Paths 二叉树路径

    Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 ...

  9. LeetCode 112. Path Sum (二叉树路径之和)

    Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...

随机推荐

  1. Python(八) —— 异常(概念、捕获、传递、抛出)

    异常的概念 捕获异常 异常的传递 抛出异常 异常的概念 程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常 程序停止执行并且提示错误信息  ...

  2. 题解 P2661 【信息传递】

    首先介绍个概念:基环外向树,也叫环加外向树,环基树,章鱼图. 这就是一颗基环外向树. 不难发现,若基环外向树有n个结点就有n条边,这也意味 着它不是颗普通的树,而是必定有一个自环. 再看看题目中的介绍 ...

  3. jdbc原生操作数据库

    jdbc原生操作数据库流程: 第一步:Class.forName()加载数据库连接驱动: 第二步:DriverManager.getConnection()获取数据连接对象; 第三步:根据 SQL 获 ...

  4. JSTreeShaking的webpack-deep-scope-plugin插件的应用

    webpack自身实现词法分析的JSTreeShaking webpack-depp-scope-plugin插件实现作用域分析的JSTreeShaking 一.webpack词法分析的JSTreeS ...

  5. MYSQL 增加语句(数据)

    增加数据     如果你失忆了,希望你能想起曾经为了追求梦想的你.     前一节我们学习了查询语句 SELECT,这节课,我们学习增加 INSERT INTO ****  VALUES ****,基 ...

  6. Struts配置文件

    本章节将带你学习Struts2 应用程序所需的基本配置.在这里可以看到哪些将被配置到一些重要的配置文件中:web.xml.struts.xml.struts-config.xml以及struts.pr ...

  7. Hadoop2.7.3集群安装scala-2.12.8 和spark2.7

    Apache Spark™是用于大规模数据处理的统一分析引擎. 从右侧最后一条新闻看,Spark也用于AI人工智能 spark是一个实现快速通用的集群计算平台.它是由加州大学伯克利分校AMP实验室 开 ...

  8. Java学习笔记【十二、网络编程】

    原计划的学习结束时间是3月4日,目前看来已经延迟了,距离低标还差一些,多方面原因,也不找借口,利用周末赶赶进度,争取本周末把低标完成吧! 参考: http://www.runoob.com/java/ ...

  9. java_day05_类和对象

    chap05目标:类和对象---------------------------------------------- 1.OOP特征概述 Java的编程语言是面向对象的,采用这种语言进行编程称为面向 ...

  10. centos 7 OpenResty®(lua-nginx-module)搭建可扩展的Web平台

    OpenResty®-英文官网地址:http://openresty.org/en/ OpenResty®-中文官网地址: http://openresty.org/cn/ OpenResty®> ...