考试时候代码
#include <iostream> #include <vector> using namespace std; const int N = 100; vector<int> resVector; int arr1[N], arr2[N], res[N]; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; TreeNode* getTree(int* a1, int left1, int right1, int* a2, int left2, int right2) { if (left1>right1) return NULL; if (left1==right1) return new TreeNode(a1[left1]); int rootVal = a1[right1]; // 后序遍历,根 int splitIndex = right2; while(a2[splitIndex] != rootVal) splitIndex--; TreeNode* tempRes = new TreeNode(rootVal); // tempRes->left = getTree(a1, left1, left1+(splitIndex-1-left2), a2, left2, splitIndex-1); tempRes->right = getTree(a1, left1+(splitIndex-1-left2)+1, right1-1, a2, splitIndex+1, right2); return tempRes; } void preOrder(TreeNode * node) { if(!node) return; resVector.push_back(node->val); preOrder(node->left); preOrder(node->right); } int main () { int n; cin >> n; for (int i=0; i<n; i++) cin >> arr1[i]; for (int j=0; j<n; j++) cin >> arr2[j]; int idx = 0; TreeNode* resRoot = getTree(arr1, 0, n-1, arr2, 0, n-1); preOrder(resRoot); for(int i=0; i<resVector.size(); i++) { cout << resVector[i]; if(i!=resVector.size()-1) cout << " "; } return 0; }
稍稍优化了一下
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <vector> using namespace std; vector<int> resVector; struct TreeNode { TreeNode* left; TreeNode* right; int val; TreeNode(int _val) : val(_val),left(NULL),right(NULL){} }; TreeNode* getTree(vector<int>& postArr, int left1, int right1, vector<int> midArr, int left2, int right2) { if (left1 > right1) return NULL; if (left1 == right1) return new TreeNode(postArr[left1]); int rootVal = postArr[right1]; int splitIndex = right2; while (midArr[splitIndex] != rootVal) splitIndex--; TreeNode* tempRes = new TreeNode(rootVal); tempRes->left = getTree(postArr, left1, left1+(splitIndex-1-left2), midArr, left2, splitIndex - 1); tempRes->right = getTree(postArr, left1 + (splitIndex - 1 - left2) + 1, right1 - 1, midArr, splitIndex + 1, right2); return tempRes; } void preOrderTrav(TreeNode* node) { if (node == NULL) return; resVector.push_back(node->val); preOrderTrav(node->left); preOrderTrav(node->right); } int main() { int n; cin >> n; vector<int> postOrderArr(n), midOrderArr(n); for (int i = 0; i < n; i++) cin >> postOrderArr[i]; for (int i = 0; i < n; i++) cin >> midOrderArr[i]; TreeNode* res = getTree(postOrderArr, 0, n - 1, midOrderArr, 0, n - 1); preOrderTrav(res); for (int i = 0; i < n; i++) { cout << resVector[i]; if (i != n - 1) cout << " "; } // system("pause"); return 0; }