题解 | #二叉树遍历#

二叉树遍历

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");
  }

}

全部评论

相关推荐

11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务