1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
int FindRoot_from_Mid(const char* mid, int len,Element rootdata) { int pos = -1; for (int i = 0; i < len; ++i) { if (mid[i] == rootdata) { pos = i; break; } } return pos; } BtNode* C_Bt_PM(const char* pre, const char* mid, int len) { BtNode* s = NULL; if (len > 0) { s = BuyNode(); if (NULL == s) exit(1); s->data = pre[0]; int pos = FindRoot_from_Mid(mid, len, pre[0]); if (-1 == pos) exit(-1);
s->leftchild = C_Bt_PM(pre + 1, mid, pos); s->rightchild = C_Bt_PM(pre + pos + 1, mid + pos + 1, len - pos - 1); } return s; } BtNode* Create_Bt_PM(const char* pre, const char* mid, int len) { if (pre == NULL || mid == NULL || len <= 0) return NULL; else { return C_Bt_PM(pre, mid, len); } } int main() { const char* pre = "ABCDEFGH"; const char* mid = "CBEDFAGH"; BtNode* root = Create_Bt_PM(pre, mid,strlen(pre)); PreOrder(root); cout << endl; MidOrder(root); cout << endl; LastOrder(root); cout << endl; return 0; }
|