思路:用递归把中序遍历的数组划分为左右子树部分,直到没有左右子树(叶子节点)。层序遍历的方法:使用队列。
#include <iostream>
#include<vector>
#include<queue>
using namespace std;
#define maxsize 30
typedef struct node* T;
struct node {
int data;
T left;
T right;
};
int n, postorder[maxsize], inorder[maxsize];
T buildTree(T tree,int start,int end) {
int flag = 0,j=n-1,stop=0;
while (1) {
for (int i = start; i < end; i++) {
if (inorder[i] == postorder[j]) {
flag++;
tree->data = inorder[i];
stop = i;
break;
}
}
if (flag==0) j--;
if (flag!=0||j < 0) break;
}
T Tleft = (T)malloc(sizeof(node));
T Tright = (T)malloc(sizeof(node));
Tleft->data = 0; Tleft->left = Tleft->right = nullptr;
Tright->data = 0; Tright->left = Tright->right = nullptr;
if (stop > start && stop < end-1) {
tree->left = bui