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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


已知遍历结果如下,写出对应的二叉树
前序: 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;
}


在这里插入图片描述

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值