#include <stdio.h>
#include <stdlib.h>
typedef struct{
char data;
struct TreeNode* lchild;
struct TreeNode* rchild;
}TreeNode;
void creatTree(TreeNode** T,char* data,int* index){//双指针才能改变外部值
char ch;
ch=data[*index];
index++;
if(ch=='#'){//''
*T=NULL;//是*T
}
else{
*T=(TreeNode*)malloc(sizeof(TreeNode));
(*T)->data=ch;
creatTree(&((*T)->lchild),data,index);
creatTree(&((*T)->rchild),data,index);
}
}
void preOrder(TreeNode* T){
if(T==NULL){
return;
}
else{
printf("%c",T->data);
preOrder(T->lchild);
preOrder(T->rchild);
}
}
void inOrder(TreeNode* T){
if(T==NULL){
return;
}
else{
preOrder(T->lchild);
printf("%c",T->data);
preOrder(T->rchild);
}
}
void postOrder(TreeNode* T){
if(T==NULL){
return;
}
else{
preOrder(T->lchild);
preOrder(T->rchild);
printf("%c",T->data);
}
}
int main(int argc,char* argv[])
{
TreeNode* T;
int index=0;
creatTree(&T,argv[1],&index);
preOrder(T);
printf("\n");
inOrder(T);
printf("\n");
postOrder(T);
printf("\n");
return 0;
}
二叉树输入输出为什么运行不了
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
影子身后 2023-09-24 20:26关注1、参数调用错误:你在先序遍历、中序遍历、后序遍历中,你应该调用相应的函数(如 preOrder、inOrder 和 postOrder),但你误用了 preOrder 函数。
2、主函数参数不足:你的主函数声明为 int main(int argc, char* argv[]),这意味着它需要从命令行参数中接受输入。你需要在命令行中运行该程序,并提供一组二叉树的表示作为参数。
3、参数解析错误:你尝试从 argv[1] 中获取表示二叉树的字符串,但你没有检查是否提供了足够的命令行参数或者字符串是否有效。#include <stdio.h> #include <stdlib.h> typedef struct TreeNode { char data; struct TreeNode* lchild; struct TreeNode* rchild; } TreeNode; void creatTree(TreeNode** T, char* data, int* index) { char ch; ch = data[(*index)++]; // 修复这里的错误 if (ch == '#') { *T = NULL; } else { *T = (TreeNode*)malloc(sizeof(TreeNode)); (*T)->data = ch; creatTree(&((*T)->lchild), data, index); creatTree(&((*T)->rchild), data, index); } } void preOrder(TreeNode* T) { if (T == NULL) { return; } else { printf("%c", T->data); preOrder(T->lchild); preOrder(T->rchild); } } void inOrder(TreeNode* T) { if (T == NULL) { return; } else { inOrder(T->lchild); // 修复这里的错误 printf("%c", T->data); inOrder(T->rchild); // 修复这里的错误 } } void postOrder(TreeNode* T) { if (T == NULL) { return; } else { postOrder(T->lchild); // 修复这里的错误 postOrder(T->rchild); // 修复这里的错误 printf("%c", T->data); } } int main(int argc, char* argv[]) { if (argc != 2) { printf("Usage: %s \"AB#C##\"\n", argv[0]); return 1; // 返回错误状态码 } TreeNode* T; int index = 0; creatTree(&T, argv[1], &index); printf("Preorder traversal: "); preOrder(T); printf("\n"); printf("Inorder traversal: "); inOrder(T); printf("\n"); printf("Postorder traversal: "); postOrder(T); printf("\n"); return 0; // 返回正常状态码 }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报