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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

18行代码AC——PTA 二叉树的遍历 (10分)——解题报告

發布時間:2024/2/28 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 18行代码AC——PTA 二叉树的遍历 (10分)——解题报告 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

勵志用盡量少的代碼做高效的表達。


根據輸入構造二叉樹,輸出該二叉樹的先序序列。二叉樹共有N個節點,節點編號是1到N。約定1號節點是根節點。

輸入格式:

第一行輸入整數N。 接下來有N行,依次給出1到N節點的左孩子和右孩子。對于這N行中的每一行,有兩個整數。第i(i=1, 2, …, N)行中,第一個整數指出左孩子的編號,第二個整數指出右孩子的編號。如果整數值為0,表示沒有左孩子或右孩子。

輸出格式:

輸出一行,內容是二叉樹的先序序列。節點編號之間用空格隔開,行末有1個空格。

輸入樣例:

6
2 5
3 4
0 0
0 0
0 6
0 0

輸出樣例:

1 2 3 4 5 6


思路分析:

本題的核心思路是:結構體數組模擬指針建樹。
最開始嘗試用指針構建二叉樹解題,但做得不舒服,解不出來。仔細思考了一下,有兩點原因。
(一)、指針建樹的優點在于:在不知道節點數目的情況下, 我們仍然可以通過“動態擴充”建樹, 但本題已經給了結點數,及每個左右子樹,這種情況下如果再用指針建樹,就相當于給我們一個條件我們沒用

(二)、題中說每行對應每個節點的操作,也就是說:并不是亂序給我們的,我們可以通過循環遍歷的方式很輕松的給結構體數組賦值。
考慮到這兩點,我將其改進為結構體數組建樹,不過結構體中的左右“子樹”為int型。同樣可以采用遞歸構造。很快就AC了。

代碼:(不算注釋為18行)

#include<iostream> using namespace std; struct Node {int l, r; }; //先序遍歷 void Fir(Node nodes[], int root) {if(root == 0) return; //遞歸結束的標志cout << root << " "; //先序遍歷的三行核心代碼,Fir(nodes, nodes[root].l); Fir(nodes, nodes[root].r); } int main() {int n; cin >> n;Node nodes[n+1];for(int i = 1; i <= n; i++) cin >> nodes[i].l >> nodes[i].r; //輸入某節點的左右子樹值Fir(nodes, 1); //約定1號節點是根節點 return 0; }

收獲:

1、結構體數組模擬指針建樹。


擇苦而安,擇做而樂,虛擬現實終究比不上真實精彩之萬一。

總結

以上是生活随笔為你收集整理的18行代码AC——PTA 二叉树的遍历 (10分)——解题报告的全部內容,希望文章能夠幫你解決所遇到的問題。

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