二叉树形状
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191016155304540.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NvZnRwYXNlRmFy,size_16,color_FFFFFF,t_70)
代码演示
#include <iostream>
#include<vector>
using namespace std;
struct TreeNode {
char val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode *reCreateTree(vector<char> pre, vector<char> vin) {
if (pre.size() == 0 && vin.size() == 0) {
return NULL;
}
TreeNode *root = new TreeNode(pre[0]);
int i, j;
for (i = 0; i < vin.size(); ++i) {
if (vin[i] == pre[0]) {
break;
}
}
vector<char> lpre, lvin, rpre, rvin;
for (j = 1; j <= i; ++j) {
lpre.push_back(pre[j]);
}
for (j = 0; j < i; ++j) {
lvin.push_back(vin[j]);
}
for (j = i + 1; j < pre.size(); ++j) {
rpre.push_back(pre[j]);
}
for (j = i + 1; j < vin.size(); ++j) {
rvin.push_back(vin[j]);
}
root->left = reCreateTree(lpre, lvin);
root->right = reCreateTree(rpre, rvin);
return root;
}
void Visit(TreeNode *T) {
cout << T->val << " ";
}
void PostOrder(TreeNode *T) {
if (T != NULL) {
PostOrder(T->left);
PostOrder(T->right);
Visit(T);
}
}
int main() {
TreeNode *root;
vector<char> pre = {'A', 'B', 'D', 'C', 'E', 'F'};
vector<char> vin = {'D', 'B', 'A', 'E', 'C', 'F'};
root = reCreateTree(pre, vin);
PostOrder(root);
return 0;
}
结果显示
![](https://img-blog.csdnimg.cn/2019101615505679.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NvZnRwYXNlRmFy,size_16,color_FFFFFF,t_70)