另一位用戶提交的類似代碼,使用 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);
}