#include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; struct Node { int value; Node *left; Node *right; Node(int value) { this->value = value; left = right = NULL; } }; bool bNotTree = false; Node* RebuildTree(int *preOrder, int *inOrder, int length) { if (length <= 0) return NULL; if (length == 1) { if (*preOrder != *inOrder) { bNotTree = true; return NULL; } return new Node(*preOrder); } int i; for (i = 0; *preOrder != inOrder[i] && i < length; ++i); if (i == length) { bNotTree = true; return NULL; } Node *root = new Node(*preOrder); root->left = RebuildTree(preOrder+1,inOrder,i); root->right = RebuildTree(preOrder + i + 1, inOrder + i + 1,length-i-1); return root; } void PrintTree(Node* root) { if (root) { PrintTree(root->left); PrintTree(root->right); cout << root->value << " "; } } int main() { int preOrder[1000]; int inOrder[1000]; int n; while (cin >> n) { int i; bNotTree = false; for (i = 0; i < n; ++i) { cin >> preOrder[i]; } for (i = 0; i < n; ++i) { cin >> inOrder[i]; } Node *tmp = RebuildTree(preOrder, inOrder, n); if (bNotTree) cout << "No" << endl; else { PrintTree(tmp); cout << endl; } } return 0; }
根据二叉树的先序序列和中序序列还原二叉树并打印后序序列,布布扣,bubuko.com
时间: 2024-10-12 03:39:53