题解 | #二叉树遍历#
二叉树遍历
https://www.nowcoder.com/practice/6e732a9632bc4d12b442469aed7fe9ce
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Tnode {
char data;
struct Tnode* lchild;
struct Tnode* rchild;
} Tnode;
void maketree(int pos, Tnode* root, char* pre, char* mid) { //构造树
if (pre[pos] != '\0') {
char lpre[27] = {'\0'};
char rpre[27] = {'\0'};
char lmid[27] = {'\0'};
char rmid[27] = {'\0'};
// printf("%c",rpre[0]);
Tnode* r, *l;
int midpos;
root->data = pre[pos];
for (int i = 0; i < 27; i++) {
if (mid[i] == pre[pos]) {
midpos = i;
break;
}
}
if (pre[pos + 1] != '\0') {
l = (Tnode*)calloc(1, sizeof(Tnode));
root->lchild = l;
}
if (pre[pos + midpos + 1] != '\0') {
r = (Tnode*)calloc(1, sizeof(Tnode));
root->rchild = r;
}
for (int i = 0; i < midpos; i++) {
lpre[i] = pre[pos + 1 + i];
lmid[i] = mid[i];
}
int i = 0;
while (pre[midpos + 1 + i] != '\0') {
rpre[i] = pre[midpos + 1 + i];
rmid[i] = mid[midpos + 1 + i];
i++;
}
maketree(pos, l, lpre, lmid); //构造左子树
maketree(pos, r, rpre, rmid); //构造右子树
} else {
return ;
}
}
void lastorder(Tnode* root) {
if (root != NULL) {
lastorder(root->lchild);
lastorder(root->rchild);
if (root->data != '\0') {
printf("%c", root->data);
}
} else {
return ;
}
}
int main() {
char pre[27];
char mid[27];
while (scanf("%s\n%s", &pre, &mid) != EOF) {
Tnode* root = (Tnode*)calloc(1, sizeof(Tnode));
maketree(0, root, pre, mid);
lastorder(root);
printf("\n");
}
}
查看24道真题和解析