永发信息网

已知二叉树如有图所示

答案:1  悬赏:50  手机版
解决时间 2021-11-09 08:48
  • 提问者网友:温旧梦泪无声
  • 2021-11-09 02:24
已知二叉树如有图所示
最佳答案
  • 五星知识达人网友:三千妖杀
  • 2021-11-09 03:53
(1) 二叉链表储存图:

                   #A#
                  /    
                #B#   ^C#
               /        
             #D#   ^E^   ^F#
            /              
          ^G^   #H#         #I^
               /           /
             ^J^   ^K^    ^M^

    上图,符号#表示指针,符号^表示空结点.


(2) 先序遍历序列: A B D G H J K E C F I M

    中序遍历序列: G D J H K B E A C F M I

    后序遍历序列: G J K H D E B M I F C A


(3) 转换为森林:

       A       C     F     I
      /                   |
     B   E                 M
   / | 
  D  H  K
  |  |
  G  J

  上图,树C里的结点C是根结点,这个树就只有C这个结点.
       树F里的结点F是根结点,这个树就只有F这个结点.


// C语言测试程序

// 创建二叉树,输入先序遍历序列: ABDG##HJ##K##E##C#F#IM###
// 先序遍历序列: ABDGHJKECFIM
// 中序遍历序列: GDJHKBEACFMI
// 后序遍历序列: GJKHDEBMIFCA

#include
#include
typedef struct Node
{
    char data;
    struct Node *lchild;
    struct Node *rchild;
}Bitree;

//用"先序遍历"算法创建二叉树
void CreateBiTree(Bitree **bt)
{
    char s;
    scanf("%c",&s); //输入数据
    if(s=='#')      //'#'是空节点
        *bt=NULL;
    else
    {
        *bt=(Bitree *)malloc(sizeof(Bitree));
        (*bt)->data=s;
        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("
中序遍历序列: ");
    inOrder(root);
    printf("
后序遍历序列: ");
    postOrder(root);

    printf("
");
    return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯