小甜孩 2022-10-15 22:09 采纳率: 100%
浏览 21
已结题

数据结构二叉树的遍历

求!数据结构二叉树遍历

代码如下:

```c++
#include <stdio.h>
#include <stdlib.h>
typedef char  Elemtype;
typedef struct BiTNode  //树结点
{
    Elemtype data;
    struct BiTNode *lchild,*rchild; //指向左右子树的指针
} *BiTree;
BiTree CreateLink() //二叉树的递归创建
{
    char data;
    BiTree T;
    scanf("%c",&data);//读入当前结点


    if(data=='0')
    {
        return NULL;
    }
    else
    {
        T=(BiTree)malloc(sizeof(BiTNode));
        T->data=data;
        printf("请输入%c的左子树: ",data);
        T->lchild=CreateLink();
        printf("请输入%c的右子树: ",data);
        T->rchild=CreateLink();
        return T;
    }
}
void visit(BiTree T)
{
    printf("%c  ",T->data);
}

//先序遍历%d
void PreOrder(BiTree T)
{

if(T==NULL)      // 递归中遇到NULL,返回上一层节点
 {
  return;
 }
 printf("%c ",T->data);
 PreOrder(T->lchild);   // 递归遍历左子树
 PreOrder(T->rchild);   // 递归遍历右子树
}

//中序遍历
void InOrder(BiTree T)
{

if(T==NULL)      // 递归中遇到NULL,返回上一层节点
 {
  return;
 }

 InOrder(T->lchild);   // 递归遍历左子树
 printf("%c ",T->data);
 InOrder(T->rchild);   // 递归遍历右子树
}

void PostOrder(BiTree T)
{


if(T==NULL)      // 递归中遇到NULL,返回上一层节点
 {
  return;
 }

 PostOrder(T->lchild);   // 递归遍历左子树
 PostOrder(T->rchild);   // 递归遍历右子树
 printf("%c ",T->data);
}


int main()
{
    BiTree T;
    printf("请输入根节点数据: ");
    T=CreateLink();
    printf("先序遍历: ");
    PreOrder(T);
    printf("\n");
    printf("中序遍历: ");
    InOrder(T);
    printf("\n");
    printf("后序遍历: ");
    PostOrder(T);
    printf("\n");
    return 0;
}
用此代码运算出来,如图所示,重复出现:“请输入 的左子树”

img

将此代码转化为int类型时,全部使用数字而非字母,就可以正常运行,不会出现错误
#include <stdio.h>
#include <stdlib.h>
typedef int  Elemtype;
typedef struct BiTNode  //树结点
{
    Elemtype data;
    struct BiTNode *lchild,*rchild; //指向左右子树的指针
} *BiTree;
BiTree CreateLink() //二叉树的递归创建
{
    int data;
    BiTree T;
    scanf("%d",&data);//读入当前结点
    if(data==-1)
    {
        return NULL;
    }
    else
    {
        T=(BiTree)malloc(sizeof(BiTNode));
        T->data=data;
        printf("请输入%d的左子树: ",data);
        T->lchild=CreateLink();
        printf("请输入%d的右子树: ",data);
        T->rchild=CreateLink();
        return T;
    }
}
void visit(BiTree T)
{
    printf("%d  ",T->data);
}
//先序遍历
void PreOrder(BiTree T)
{
if(T==NULL)      // 递归中遇到NULL,返回上一层节点
 {
  return;
 }
 printf("%d ",T->data);
 PreOrder(T->lchild);   // 递归遍历左子树
 PreOrder(T->rchild);   // 递归遍历右子树
}
//中序遍历
void InOrder(BiTree T)
{
if(T==NULL)      // 递归中遇到NULL,返回上一层节点
 {
  return;
 }
 InOrder(T->lchild);   // 递归遍历左子树
 printf("%d ",T->data);
 InOrder(T->rchild);   // 递归遍历右子树
}
void PostOrder(BiTree T)
{
if(T==NULL)      // 递归中遇到NULL,返回上一层节点
 {
  return;
 }

 PostOrder(T->lchild);   // 递归遍历左子树
 PostOrder(T->rchild);   // 递归遍历右子树
 printf("%d ",T->data);
}
int main()
{
    BiTree T;
    printf("请输入根节点数据: ");
    T=CreateLink();
    printf("先序遍历: ");
    PreOrder(T);
    printf("\n");
    printf("中序遍历: ");
    InOrder(T);
    printf("\n");
    printf("后序遍历: ");
    PostOrder(T);
    printf("\n");
    return 0;
}

img

想要将字符类型的代码改善改善,将其运行出来向int类型时,没有错误,不会重复出现“请输入 的左子树”
  • 写回答

2条回答 默认 最新

查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月24日
  • 已采纳回答 10月16日
  • 创建了问题 10月15日

悬赏问题

  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答