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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

31行代码AC——PTA 求二叉树的叶子结点个数 (20分)——解题报告

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

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


以二叉鏈表作為二叉樹的存儲結構,求二叉樹的葉子結點個數。

輸入格式:

輸入二叉樹的先序序列。
提示:一棵二叉樹的先序序列是一個字符串,若字符是‘#’,表示該二叉樹是空樹,否則該字符是相應結點的數據元素。

輸出格式:

輸出有兩行:
第一行是二叉樹的中序遍歷序列;
第二行是二叉樹的葉子結點個數。

輸入樣例:

ABC##DE#G##F###

輸出樣例:

CBEGDFA
3


分析:

由于本題較基礎,因此思路從解題轉為優化。
本題考查樹的中序遍歷+求葉子節點個數。
值得注意的是:一般的思維是:中序遍歷建一個函數,求葉子結點建一個函數。但更優化的解法是:將兩個函數合一,可以減少一次樹的遍歷,提高效率。

代碼:(去掉3行注釋為31行)

#include<bits/stdc++.h> using namespace std; int sum = 0; //1、聲明 typedef struct BiTNode { char x;struct BiTNode* l, *r; }*BiTree; //2、創建樹 BiTree Create(BiTree T) { char ch = getchar(); //賦值 if(ch == '#') T = NULL; //遇#則置空 else {T = new BiTNode();T->x = ch; //賦值 T->l = Create(T->l); //遞歸賦值 T->r = Create(T->r);} return T; } //3、中序遍歷+求葉子 void Mid(BiTree T) { if(T) { if(T->l == NULL && T->r == NULL) sum++; if(T->l) Mid(T->l); //中序遍歷就是把輸出放在中間。cout << T->x;if(T->r) Mid(T->r);} } int main() {BiTree T;T = Create(T);Mid(T); cout << endl << sum;return 0; }

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

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的31行代码AC——PTA 求二叉树的叶子结点个数 (20分)——解题报告的全部內容,希望文章能夠幫你解決所遇到的問題。

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