已知一個按先序序列輸入的字元序列,如abc,,de,g,,f,,,(其中逗號表示空節點)。請建立二叉樹並按中序和後序方式遍歷二叉樹,最後求出葉子節點個數和二叉樹深度。
阿新 • • 發佈:2019-01-23
這是一個標準的模板題 記下了就完事了!
Input
輸入一個長度小於50個字元的字串。
Output
輸出共有4行:
第1行輸出中序遍歷序列;
第2行輸出後序遍歷序列;
第3行輸出葉子節點個數;
第4行輸出二叉樹深度。
Sample Input
abc,,de,g,,f,,,
Sample Output
cbegdfa
cgefdba
3
5
#include <iostream> #include <stdio.h> using namespace std; typedef struct jied { char date; struct jied *lchild,*rchild; } jied,*p; int d = 0,ma = 0,num = 0; void jianshu (p &T) { char ch; scanf("%c",&ch); if(ch == ',') T = NULL; else if(ch == '\n') { return ; } else { T = new jied;// 讓指標實體化 new返回的是jied的指標 T -> date = ch; jianshu(T -> lchild); jianshu(T -> rchild); } } void zhongxu(p T) { if(T) { zhongxu(T -> lchild); printf("%c",T -> date); zhongxu(T -> rchild); } } void houxu(p T,int d) { if(T) { houxu(T -> lchild,d+1); houxu(T -> rchild,d+1); printf("%c",T -> date); if(ma<d) ma = d;//防止同一層多次相加 } } void y(p T) { if(T!=NULL) { if(T -> lchild == NULL && T -> rchild == NULL) num++; else { y(T -> lchild); y(T -> rchild); } } } int main() { p T; jianshu(T); zhongxu(T); printf("\n"); houxu(T,ma); printf("\n"); y(T); printf("%d\n",num); printf("%d\n",ma + 1); return 0; }