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

数据结构二叉树的遍历

求!数据结构二叉树遍历

代码如下:

```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日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵