数据结构——二叉树——已知遍历结果如下,试画出对应的二叉树 前序: A B C E H F I J D G K 中序: A H E C I F J B D K G

本文详细介绍了如何使用C语言实现二叉树的创建,以及先序、中序和后序遍历算法。通过递归方式构造树结构,并提供了相关代码示例和测试过程。
摘要由CSDN通过智能技术生成


已知遍历结果如下,写出对应的二叉树
前序: A B C E H F I J D G K
中序: A H E C I F J B D K G?
创建的时候以先序的方式创建,当某个结点没有左子树或者右子树的时候用#号进行补齐
先序遍历:先访问树根,再访问左子树,最后访问右子树
中序遍历:先访问左子树,再访问树根,最后访问右子树
后序遍历:先访问左子树,再访问右子树,最后访问树根

一、实现

1.创建树

代码如下(示例):

typedef char data_t;
typedef struct node_t{
  data_t data;
  struct node_t *left;
  struct node_t *right;
}bitree;

bitree *tree_create();
void preorder(bitree *root);
void inorder(bitree *root);
void postorder(bitree *root);

2.实现树的先序、中序、后序

代码如下(示例):

bitree * tree_create(){
   data_t ch;
   bitree *root;
   scanf("%c",&ch);
   if(ch == '#'){
      return NULL;
   }

   if((root = (bitree *)malloc(sizeof(bitree)))==NULL){
    printf("malloc failed\n");
    return NULL;
   }

   root->data = ch;
   root->left = tree_create();
   root->right = tree_create();
   return root;
}

void preorder(bitree * root){
   if(root == NULL){
      return;
   }
   printf("%c",root->data);
   preorder(root->left);
   preorder(root->right);
}

void inorder(bitree * root){
    if(root == NULL){
     return;
    }
    inorder(root->left);
    printf("%c",root->data);
    inorder(root->right);
}

void postorder(bitree * root){
    if(root == NULL){
      return ;
     }
    postorder(root->left);
    postorder(root->right);
    printf("%c",root->data);
}

3.测试树

代码如下(示例):

int main(int argc,const char *argv[]){
    bitree *root;
    
    if((root = tree_create())== NULL){
       return -1;
    }

    preorder(root);
    puts("");
    inorder(root);
    puts("");
    postorder(root);
    puts("");

    return 0;
}


在这里插入图片描述

在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 根据给前序遍历中序遍历结果,可以画如下的二叉树: ``` A / \ B D / \ / \ C E G K / \ H F / I \ J ``` 二叉树的后序遍历结果为:C H I J F E B G K D A ### 回答2: 根据前序遍历结果A B C E H F I J D G K和中序遍历结果B E H F I J C A D G K可以画对应二叉树如下: ``` A / \ B D / \ / \ C E G K / \ H F / I \ J ``` 根据二叉树的定义,后序遍历的顺序是先遍历左子树,再遍历右子树,最后遍历根节点。根据这个顺序,对上述二叉树进行后序遍历的结果是: B H I J F E C G K D A ### 回答3: 根据给前序遍历结果和中序遍历结果,我们可以推断二叉树的结构和元素的位置。 首先,根据前序遍历的顺序,根节点是 A,所以 A 是根节点。然后根据中序遍历的顺序,我们可以得知根节点 A 前面是 B C E H F I J,后面是 D G K。所以 B C E H F I J 是 A 的左子树,而 D G K 是 A 的右子树。 接下来,我们继续找 B C E H F I J 的根节点。根据前序遍历的顺序,第一个元素是 B,所以 B 是根节点。然后根据中序遍历的顺序,我们可以得知根节点 B 前面是 C E H,后面是 F I J。所以 C E H 是 B 的左子树,而 F I J 是 B 的右子树。 继续分析左子树 C E H,根据前序遍历的顺序,第一个元素是 C,所以 C 是根节点。根据中序遍历的顺序,我们可以得知根节点 C 前面是空,后面是 E H。所以 E H 是 C 的右子树,左子树为空。 继续分析左右子树 E H,根据前序遍历的顺序,第一个元素是 E,所以 E 是根节点。根据中序遍历的顺序,我们可以得知根节点 E 前面是空,后面是 H。所以 H 是 E 的右子树,左子树为空。 最后,我们分析右子树 F I J。根据前序遍历的顺序,第一个元素是 F,所以 F 是根节点。根据中序遍历的顺序,我们可以得知根节点 F 前面是 I J,后面是空。所以 I J 是 F 的左子树,右子树为空。 根据以上分析,我们可以画对应二叉树如下(空节点用#表示): A / \ B D / \ / \ C # G K / \ # E / \ # H \ # 根据右子树为空的特点,我们可以得后序遍历结果为:# # H E C # I J F K G D A
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值