故态 2020-10-29 20:12 采纳率: 0%
浏览 201

c语言二叉树创建二叉树问题

代码是转载某个大佬的= =
我只是想问一下
就是为什么图片说明
创造二叉树方法要传入*T
然后 遍历的话要传入T ???困惑求解!!

#include
#include

typedef int ElemType; //这里用int 作为树结点的数据

typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild, *rchild; //左右孩子指针
}BiTNode, *BiTree;

void createBiTree(BiTree *T); //创建树
void preOrderTraverse(BiTree T); //前序遍历
void inOrderTraverse(BiTree T); //中序遍历
void postOrderTraverse(BiTree T); //后序遍历

int main()
{
BiTree T = NULL;
createBiTree(&T);
preOrderTraverse(T);
printf("\n");
inOrderTraverse(T);
printf("\n");
postOrderTraverse(T);
return 0;
}

void createBiTree(BiTree *T)
{
ElemType ch;
scanf ("%d", &ch); //如果是字符型 %c 回车输入 算一个字符,ubutun会一直递归
if (0 == ch) //扩展二叉树,虚结点 == 0
{
*T = NULL;
}
else
{
*T = (BiTree)malloc(sizeof(BiTNode)); //!!! stdlib.h 头文件一定要加!!!
if (!*T)
{
exit(1); //错误退出
}
(*T)->data = ch; //生成根结点
createBiTree(&((*T)->lchild)); //构造左子树
createBiTree(&((*T)->rchild)); //构造右子树
}
}

void preOrderTraverse(BiTree T)
{
if (NULL == T)
{
return;
}
printf("%d", T->data); //显示结点数据,可以改成其他对结点的操作
preOrderTraverse(T->lchild); //再先序遍历左子树
preOrderTraverse(T->rchild); //最后先序遍历右子树
}

void inOrderTraverse(BiTree T)
{
if (NULL == T)
{
return;
}
inOrderTraverse(T->lchild); //中序遍历左子树
printf("%d", T->data); //显示结点数据,可以改成其他对结点的操作
inOrderTraverse(T->rchild); //最后再中序遍历右子树
}

void postOrderTraverse(BiTree T)
{
if (NULL == T)
{
return;
}
postOrderTraverse(T->lchild); //先后序遍历左子树
postOrderTraverse(T->rchild); //再后序遍历右子树
printf("%d", T->data); //显示结点数据,可以改成其他对结点的操作
}
运行结果:依次输入120400300

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 16:17
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 查询优化:A表100000行,B表2000 行,内存页大小只有20页,运行时3页,设计两个表等值连接的最简单的算法
  • ¥15 led数码显示控制(标签-流程图)
  • ¥20 为什么在复位后出现错误帧
  • ¥15 结果有了,想问一下这个具体怎么输入
  • ¥15 怎么修改鸿蒙app的UI及功能设计
  • ¥15 帮我利用jupyter 运行一个正确的代码
  • ¥15 如何使用Gephi软件和Python包中的GephiStreamer交互
  • ¥15 sqlite加密问题咨询
  • ¥15 appdesigner接收不到udp组播的数据
  • ¥15 verilog 非阻塞赋值下的移位拼接错误