首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

二叉樹重建與可視化:從先序中序到後序的完整 C++ 實現

     編輯:程式設計疑難解答

需求同 23484

另一位用戶提交的類似代碼,使用 BinarytreeNode 類和數組下標方式構建。

代碼亮點

BinarytreeNode* createtree(int *in, int *pre, int n) {
    if (n == 0) return NULL;
    int k = 0;
    while (pre[0] != in[k]) k++;
    BinarytreeNode* root = new BinarytreeNode(pre[0]);
    root->left = createtree(in, pre+1, k);           // 左子樹:中序前 k 個,先序跳過根
    root->right = createtree(in+k+1, pre+k+1, n-k-1); // 右子樹
    return root;
}

void postorder(BinarytreeNode* t) {
    if (t) {
        postorder(t->left);
        postorder(t->right);
        cout << t->data << ",";
    }
}

補充:樹形打印

原帖未包含打印邏輯,可參考 23484 的座標計算法,或使用遞歸縮進打印:

void printTree(Node* root, int depth) {
    if (!root) return;
    printTree(root->right, depth+1);
    for (int i=0; idata << "\n";
    printTree(root->left, depth+1);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved