数据结构(c语言版)

实验名称:二叉树的表示及运算
实验目的: 通过实验能够学会二叉树的建立与遍历。
实验内容:建立一棵二叉树,并用递归或非递归的算法分别用先序、中序和后序遍历之。
帮忙写一段代码 测试数据 实验步骤 实验结果 重要的是代码 别的给我说一下怎么写就行

测试数据1:
创建二叉树,输入先序扩展序列:ABD##E##C#F##
先序遍历输出节点:A B D E C F
中序遍历输出节点:D B E A C F
后序遍历输出节点:D E B F C A

二叉树示意图:
          A
       /      \
      B        C
    /    \    / \
   D      E  #   F
  / \    / \    / \
 #   #  #   #  #   #


测试数据2:
创建二叉树,输入先序扩展序列:ABC##DE#G##F###
先序遍历输出节点:A B C D E G F
中序遍历输出节点:C B E G D F A
后序遍历输出节点:C G E F D B A

二叉树示意图:
           A
         /   \
        B     #
    /      \
   C        D
  / \    /     \
 #  #   E       F
       / \     / \
      #   G   #   #
         / \
        #   #


#include<stdio.h>
#include<stdlib.h>

typedef struct Node   //二叉树的结构体
{
    char data;            //字符
    struct Node *lchild;  //左分支
    struct Node *rchild;  //右分支
}Bitree;

//创建二叉树: 用"先序遍历"(递归法)
void CreateBiTree(Bitree **bt)
{
    char ch;
    scanf("%c",&ch); //输入字符
    if(ch=='#')      //'#'是空节点NULL
        *bt=NULL;
    else
    {
        *bt=(Bitree *)malloc(sizeof(Bitree));
        (*bt)->data=ch;
        CreateBiTree(&((*bt)->lchild));
        CreateBiTree(&((*bt)->rchild));
    }
}

//用"先序遍历"输出节点(递归法)
void preOrder(Bitree *ptr)
{
    if(ptr!=NULL)
    {
        printf("%c ",ptr->data);
        preOrder(ptr->lchild);
        preOrder(ptr->rchild);
    }
}

//用"中序遍历"输出节点(递归法)
void inOrder(Bitree *ptr)
{
    if(ptr!=NULL)
    {
        inOrder(ptr->lchild);
        printf("%c ",ptr->data);
        inOrder(ptr->rchild);
    }
}

//用"后序遍历"输出节点(递归法)
void postOrder(Bitree *ptr)
{
    if(ptr!=NULL)
    {
        postOrder(ptr->lchild);
        postOrder(ptr->rchild);
        printf("%c ",ptr->data);
    }
}

int main()
{
    Bitree *root;
    printf("创建二叉树,输入先序扩展序列:");
    CreateBiTree(&root);

    printf("先序遍历输出节点: ");
    preOrder(root);
    printf("\n中序遍历输出节点: ");
    inOrder(root);
    printf("\n后序遍历输出节点: ");
    postOrder(root);

    printf("\n");
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
相似回答