PTA 二叉樹路徑

2022-07-25 17:51:28 字數 1131 閱讀 8058

二叉樹的路徑 (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#include

#include

using

namespace

std;

intmain()

else

if(x}

printf(

"scenario #%d:\n%d %d\n\n

",p++,l,r);

}

return0;

}

二叉樹 路徑

二叉樹中,從根節點到葉節點的每一條連線,我們稱之為路徑,最短路徑和最長路徑在之前的部落格中,我們已經完成了對他們的討論,現在我們討論一下,輸出一棵二叉樹中全部的路徑資訊。如下所示 public class operation childbinarytreepath root,return resul...

PTA玩轉二叉樹

7 26 玩轉二叉樹 25 分 給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。輸入第一行給出乙個正整數n 30 是二叉樹中結點的個數。第二行給出其中序遍歷序列。第三行給出其前...

pta 還原二叉樹

給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入格式 輸入首先給出正整數n 50 為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出格式 輸出為乙個整數,即該二叉樹的高度。輸入樣例 9 abdfghiec fdhgi...