日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PTA 二叉树路径

發布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PTA 二叉树路径 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二叉樹的路徑 (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=1,l,r;scanf("%d",&n);while(n--){ scanf("%d%d",&x,&y);l=r=0; //l表示要經過左子樹的數量,r表示要經過右子樹的數量while(x!=1||y!=1){if(x>y) {if(y==1)l+=x-1,x=1; //當y為1時,x就只要走x-1步就能變成1了,記住要把x賦為1(跳出的條件所需)elsel+=x/y,x%=y; //當兩個數都不為1時,將其的商加入l中,x的值需要改變成x%y的余數 }else if(x<y){if(x==1)r+=y-1,y=1; //同上elser+=y/x,y%=x; //同上 }}printf("Scenario #%d:\n%d %d\n\n",p++,l,r);} return 0; }

?

轉載于:https://www.cnblogs.com/buhuiflydepig/p/10611409.html

總結

以上是生活随笔為你收集整理的PTA 二叉树路径的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。