連結儲存轉為順序儲存(二叉樹)
阿新 • • 發佈:2019-02-11
1、題目:
Problem Description
問題描述:設有一棵二叉樹,其節點值為字元型並假設各值互不相等,採用二叉連結串列儲存表示。現輸入其擴充套件二叉樹的前序遍歷序列,建立該二叉連結串列,要求將該二叉樹的二叉連結串列儲存結構轉換為順序儲存結構,並輸出各陣列元素,空二叉樹用'#'表示。Input
第一行為一個整數n,表示以下有n組資料,每組資料佔一行,為擴充套件二叉樹的前序遍歷序列。Output
輸出順序儲存表示時的各陣列元素。Sample Input
2 AB#D##C## ABD##E##C#F##
Sample Output
ABC#D ABCDE#F
2.參考程式碼:
#include <iostream> using namespace std; #define max(i,j) i>j?i:j typedef struct BiNode{ char data; BiNode* lchild,* rchild; }* BiTree; char str[1111]; int num; ///統計個數用的 BiTree t; void Creat(BiTree& t,int x){ t=new BiNode; char ch; cin>>ch; if(ch=='#') t=NULL; else{ t->data=ch; num=max(x,num); ///統計最終的個數 str[x]=ch; Creat(t->lchild,x<<1); ///建立左子樹 Creat(t->rchild,x<<1|1); ///建立右子樹 } } int main() { int n; cin>>n; while(n--) { memset(str,'#',sizeof(str)); num=0; Creat(t,1); if(t==NULL){ ///如果是空樹,就輸出井號 cout<<"#\n"; continue; } for(int i=1;i<=num;i++) cout<<str[i]; cout<<endl; } return 0; }