- 問題描述:設有n個節點的二叉樹采用順序存儲結構存儲在數組BT中,編寫函數由該數組創建的二叉鏈式存儲結構
- 思路:假定BT數組中順序存儲順序為層次遍歷的順序
BT數組中的下標 與 二叉樹節點按層次遍歷編號 如圖:
即得到節點的值等於BT[K-1],k為節點編號,以及如下圖根節點與左右子樹的編號規律
則可以利用遞歸
遞歸一般分為三部分:
1.遞歸出口以及參數的容錯處理
2.遞歸邏輯(在每一次調用做的事情)
3.遞歸調用
代碼:
1 #include<iostream> 2 #include<string> 3 char BT[] = "ABCD#EF"; 4 int n = strlen(BT); 5 using namespace std; 6 typedef struct TNode{ 7 char data; 8 TNode *lchild, *rchild; 9 TNode(char d):data(d),lchild(NULL),rchild(NULL){}//構造函數 10 ~TNode(){delete lchild;delete rchild;} 11 }; 12 void Create(TNode **t,int k) 13 { 14 if (k>n||BT[k-1] == '#')//缺失一個=號,則t=NULL 15 { 16 *t = NULL; 17 }//遞歸出口 18 else 19 { 20 *t = new TNode(BT[k-1]);//遞歸邏輯 21 Create(&(*t)->lchild,2*k);//遞歸調用 22 Create(&(*t)->rchild,2*k+1); 23 } 24 25 } 26 int main() 27 { 28 TNode *t; 29 Create(&t,1);
30 31 }