小甜孩 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日

悬赏问题

  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题