输入二叉树的先序序列,空指针用0表示,建立二叉树 c语言,我用C语言先序次序创建二叉树,然后分别用三种方法遍历此二叉树,不知道程序除了什么问题,输入数据没反应...

这篇博客介绍了如何使用C语言实现二叉树的先序、中序和后序遍历,以及如何通过先序遍历构造二叉树。同时,提供了三种不同顺序的输出函数,包括先序、中序和后序。代码示例展示了遍历过程,并在主函数中应用了遍历函数展示遍历序列。
摘要由CSDN通过智能技术生成

最佳答案

1、声明类型错误2、本身具备遍历功能,例如:Disp_xian直接调用就行3、要想使用PreOrderTraverse函数,必须增加打印输出函数才能满足第二个参数是函数指针类型#include#include#define OK 1#define ERROR 0#define OVERFLOW -2typedef char TElemType;//字符录入typedef int Status;typedef struct BiTNode//注意采用的是二叉链表作为二叉树的存储结构{ TElemType data; struct BiTNode *lchild,*rchild;}BiTNode, *BiTree;Status CreateBiTree_PreOrder(BiTree &T) //先序次序构造二叉树{ TElemType ch; scanf("%c",&ch); if(ch==' ') T=NULL; else { if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) exit(OVERFLOW); T->data=ch; CreateBiTree_PreOrder(T->lchild); CreateBiTree_PreOrder(T->rchild); } return OK;}Status PreOrderTraverse(BiTree T, Status(*Visit)(TElemType e))//先序遍历{ if(T) { if((*Visit)(T->data)) if(PreOrderTraverse(T->lchild,Visit)) if(PreOrderTraverse(T->rchild,Visit)) return OK; return ERROR; } return OK;}Status InOrderTraverse(BiTree T, Status (*Visit)(TElemType e)){ //中序遍历 if(T!=NULL){ if(InOrderTraverse(T->lchild,Visit)) if((*Visit)(T->data)) if(InOrderTraverse(T->rchild,Visit)) return OK; return ERROR; } else return OK;}Status PostOrderTraverse(BiTree T, Status(*Visit)(TElemType e)){ //后序遍历 if(T!=NULL){ if(PostOrderTraverse(T->lchild,Visit)) if(PostOrderTraverse(T->rchild,Visit)) if((*Visit)(T->data)) return OK; return ERROR; } else return OK;}void Disp_zhong(BiTree root)//中序输出{ if(root!=NULL) { Disp_zhong(root->lchild); printf("%c->",root->data);//是data,不是date Disp_zhong(root->rchild); }}void Disp_hou(BiTree root)//后序输出{ if(root!=NULL) { Disp_hou(root->lchild); Disp_hou(root->rchild); printf("%c->",root->data); }}void Disp_xian(BiTree root)//先序输出{ if(root!=NULL) { printf("%c->",root->data); Disp_xian(root->lchild); Disp_xian(root->rchild); }}//输出序列Status PrintTree(TElemType e){ if(e!=' ') { printf("%c ",e); return OK; } else return ERROR;}void main()//主函数{ BiTree T; printf("以先序次序创建二叉树:\n"); CreateBiTree_PreOrder(T); printf("先序遍历序列为:\n"); PreOrderTraverse(T,PrintTree); printf("\n"); printf("中序遍历序列为:\n"); InOrderTraverse(T,PrintTree); printf("\n"); printf("后序遍历序列为:\n"); PostOrderTraverse(T,PrintTree); printf("\n"); }追问void Disp_zhong(BiTree root)//中序输出void Disp_hou(BiTree root)//后序输出void Disp_xian(BiTree root)//先序输出这3个函数在主函数不是没用到吗?

最佳答案由网友  朱小亲  提供

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用C语言实现先序创建一棵二叉树,并使用三种遍历方法进行遍历的代码: ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树结点结构体 typedef struct TreeNode { char data; // 数据域 struct TreeNode *left; // 左子树指针 struct TreeNode *right; // 右子树指针 } TreeNode, *TreeNodePtr; // 先序创建二叉树 void createTree(TreeNodePtr *tree) { char ch; scanf("%c", &ch); if (ch == '#') { *tree = NULL; } else { *tree = (TreeNodePtr) malloc(sizeof(TreeNode)); (*tree)->data = ch; createTree(&((*tree)->left)); createTree(&((*tree)->right)); } } // 先序遍历二叉树 void preOrder(TreeNodePtr tree) { if (tree != NULL) { printf("%c ", tree->data); preOrder(tree->left); preOrder(tree->right); } } // 中序遍历二叉树 void inOrder(TreeNodePtr tree) { if (tree != NULL) { inOrder(tree->left); printf("%c ", tree->data); inOrder(tree->right); } } // 后序遍历二叉树 void postOrder(TreeNodePtr tree) { if (tree != NULL) { postOrder(tree->left); postOrder(tree->right); printf("%c ", tree->data); } } int main() { TreeNodePtr tree; printf("请输入先序遍历序列:\n"); createTree(&tree); printf("先序遍历序列:"); preOrder(tree); printf("\n中序遍历序列:"); inOrder(tree); printf("\n后序遍历序列:"); postOrder(tree); printf("\n"); return 0; } ``` 我们可以通过输入先序遍历序列创建一棵二叉树,并使用三种遍历方法进行遍历,输出遍历序列。其中,`#` 表示空结点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值