前+中
struct node {
int num;
node* l, * r;
node(int elem, node* n1 = nullptr, node* n2 = nullptr) {
num = elem;
l = n1, r = n2;
}
};
int mei[20], pre[20];
node* build(int lp,int rp,int lm,int rm) {
if (lm > rm || lp > rp) return nullptr;
int id = 0,ls;
for (int i = lm; i <= rm; ++i) {
if (mei[i] == pre[lp]) {
id = i;
break;
}
}
ls = id - lm;
node* tree= new node(pre[lp]);
tree->l = build(lp+1,lp+ls,lm,id-1);
tree->r = build(lp+ls+1,rp,id+1,rm);
return tree;
}
后+中
struct node {
int num;
node* l, * r;
node(int elem, node* n1 = nullptr, node* n2 = nullptr) {
num = elem;
l = n1, r = n2;
}
};
int mei[20], beh[20];
node* build(int lm,int rm,int lb,int rb) {
if (lm > rm || lb > rb) return nullptr;
int id = 0,ls;
for (int i = lm; i <= rm; ++i) {
if (mei[i] == beh[rb]) {
id = i;
break;
}
}
ls = id - lm;
node* tree= new node(beh[rb]);
tree->l = build(lm,id-1,lb,lb+ls-1);
tree->r = build(id+1,rm,lb+ls,rb-1);
return tree;
}
层+中
struct Node {
int data;
Node* lchild;
Node* rchild;
Node(const int& elem, Node* lc = nullptr, Node* rc = nullptr) {
data = elem;
lchild = lc;
rchild = rc;
}
};
int* sqe;
int* med;
Node* buildTree(int sL, int sR, int mL, int mR) {
if (mL > mR) return nullptr;
int i, j;
int flag = 0;
for (i = sL; i <= sR; i++) {
for (j = mL; j <= mR; j++) {
if (sqe[i] == med[j]) {
flag = 1;
break;
}
}
if (flag) break;
}
Node* root = new Node(sqe[i]);
root->lchild = buildTree(sL + 1, sR, mL, j - 1);
root->rchild = buildTree(sL + 1, sR, j + 1, mR);
return root;
}