描述
利用先序遞歸遍歷算法創建二叉樹並輸出該二叉樹的層次遍歷序列。先序遞歸遍歷建立二叉樹的方法為:按照先序遞歸遍歷的思想將對二叉樹結點的抽象訪問具體化為根據接收的數據決定是否產生該結點從而實現創建該二叉樹的二叉鏈表存儲結構。約定二叉樹結點數據為單個大寫英文字符。當接收的數據是字符"#"時表示該結點不需要創建,否則創建該結點。最后再輸出創建完成的二叉樹的層次遍歷序列。需要注意輸入數據序列中的"#"字符和非"#"字符的序列及個數關系,這會最終決定創建的二叉樹的形態。
input
輸入為接受鍵盤輸入的由大寫英文字符和"#"字符構成的一個字符串(用於創建對應的二叉樹)。
output
每個用例用一行出該用例對應的二叉樹的層次遍歷序列。
樣例輸入
A##
ABC####
AB##C##
ABCD###EF##G##H##
A##B##
樣例輸出
A
ABC
ABC
ABHCEDFG
A
這道題非常簡單,直觀的看就是輸出每一排的數據,解決方案就是先將根節點入隊列,然后當隊列不空時就將隊頭元素出隊輸出,並將其孩子節點入隊,如此循環。
代碼如下
1 #include<iostream> 2 #include<queue> 3 using namespace std; 4 5 typedef struct node{ 6 char data; 7 node*lchild,*rchild; 8 }BiNode,*BiTree; 9 10 BiTree create(){ 11 char ch; 12 BiTree T; 13 cin>>ch; 14 if(ch=='#'){ 15 T=NULL; 16 }else{ 17 T=new BiNode; 18 T->data=ch; 19 T->lchild=create(); 20 T->rchild=create(); 21 } 22 return T; 23 } 24 void visit(BiTree T){ 25 cout<<T->data; 26 } 27 void bianli(BiTree T){ 28 if(T==NULL)return; 29 bianli(T->lchild); 30 visit(T); 31 bianli(T->rchild); 32 } 33 void cxbl(BiTree T){ 34 queue<BiTree>q; 35 q.push(T); 36 BiTree p; 37 while(!q.empty()){ 38 cout<<q.front()->data; 39 p=q.front(); 40 q.pop(); 41 if(p->lchild!=NULL){q.push(p->lchild); 42 } 43 if(p->rchild!=NULL){q.push(p->rchild); 44 } 45 } 46 } 47 int main(){ 48 BiTree Tree=create(); 49 cxbl(Tree); 50 return 0; 51 }
