面试题03 - 重建二叉树 【树】[ 一定要记住 ]
题目 : 根据前序和中序还原二叉树
1/ \
2 3
/ / \
4 5 6
\ /
7 8
#include <iostream> #include <string> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <vector> #include <stack> #include <deque> #include <queue> #include <bitset> #include <list> #include <map> #include <set> #include <iterator> #include <algorithm> #include <functional> #include <utility> #include <sstream> #include <climits> #include <cassert> #define BUG puts("here!!!"); using namespace std; struct Node { int value; Node* lchild, *rchild; }; Node* creat() { int x; cin >> x; if(x == -1) return NULL; Node* root = new Node(); root->value = x; root->lchild = creat(); root->rchild = creat(); return root; } Node* solve(int *pre, int *ino, int len) { if(pre == NULL || ino == NULL || len <= 0) return NULL; int rootValue = pre[0]; Node* root = new Node(); root->value = rootValue; int i; for(i = 0; ; ++i) { if(ino[i] == rootValue) { break; } } root->lchild = solve(pre+1, ino, i); root->rchild = solve(pre+i+1, ino+i+1, len-i-1); return root; } int main() { return 0; }