31行代码AC——PTA 求二叉树的叶子结点个数 (20分)——解题报告
生活随笔
收集整理的這篇文章主要介紹了
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分)——解题报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 43行代码AC——例题6-8 树(Tre
- 下一篇: 18行代码AC——PTA 二叉树的遍历