用C语言意思不变改写一下 void InOrder(BiTree Tree){ if(Tree == NULL){ return ; } InOrder(Tree->lchild); printf(“%c”, Tree->data); InOrder(Tree->rchild); } void creat(BiTree &Tree){ char c; scanf(“%c”, &c); if(c != ‘#’){ Tree = (BiTree)malloc(sizeof(BiTNode)); Tree->data = c; creat(Tree->lchild); creat(Tree->rchild); } else { Tree = NULL; } }
时间: 2023-06-20 07:04:32 浏览: 85
以下是用 C 语言重新编写的代码:
```c
void InOrder(BiTree Tree) {
if (Tree == NULL) {
return;
}
InOrder(Tree->lchild);
printf("%c", Tree->data);
InOrder(Tree->rchild);
}
void create(BiTree* Tree) {
char c;
scanf("%c", &c);
if (c != '#') {
*Tree = (BiTree)malloc(sizeof(BiTNode));
(*Tree)->data = c;
create(&((*Tree)->lchild));
create(&((*Tree)->rchild));
} else {
*Tree = NULL;
}
}
```
主要的改动是在 `create` 函数中,把 `BiTree` 结构体指针放入函数参数中,通过引用修改 `Tree` 的值。同时,为了避免结构体指针的取值和成员访问符号的优先级问题,对其进行了括号处理。
相关问题
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef int DataType; void print(BiTree tree); BiTree CreatBiTree(); typedef struct Node{ DataType data; struct Node *LChild; struct Node *RChild; }BiTNode,* BiTree; void print(BiTree tree) { if(tree){ printf(tree->LChild); printf("%d",tree->data); printf(tree->RChild); } } BiTree CreatBiTree() { char ch; if(ch=='#') return NULL; else{ BiTree Node=((Node *)malloc(Node)); Node->LChild=CreatBiTree(); Node->data=ch; Node->RChild=CreatBiTree(); } } int main() { BiTree tree=NULL; tree=CreatBiTree(); print(tree); return 0; }找错误
这段代码中存在以下几个错误:
1. 缺少头文件定义,应该添加头文件:`#include "stdlib.h"`和`#include "string.h"`。
2. `BiTree`的定义应该在函数之前。
3. `CreatBiTree`函数中缺少输入,应该在函数内部添加一个读取输入字符的语句,例如:`scanf("%c",&ch);`。
4. 在`CreatBiTree`函数中,分配内存的语句应该是`Node=((BiTree)malloc(sizeof(BiTNode)));`,而不是`Node=((Node *)malloc(Node));`。
5. `print`函数中应该打印`tree->LChild`和`tree->RChild`的数据,而不是直接打印指针地址。应该改成:`print(tree->LChild); printf("%d",tree->data); print(tree->RChild);`。
下面是修改后的代码:
```
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int DataType;
typedef struct Node{
DataType data;
struct Node *LChild;
struct Node *RChild;
} BiTNode,* BiTree;
BiTree CreatBiTree();
void print(BiTree tree);
void print(BiTree tree) {
if(tree){
print(tree->LChild);
printf("%d",tree->data);
print(tree->RChild);
}
}
BiTree CreatBiTree() {
char ch;
scanf("%c",&ch);
if(ch=='#')
return NULL;
else{
BiTree Node=((BiTree)malloc(sizeof(BiTNode)));
Node->LChild=CreatBiTree();
Node->data=ch;
Node->RChild=CreatBiTree();
return Node;
}
}
int main() {
BiTree tree=NULL;
tree=CreatBiTree();
print(tree);
return 0;
}
```
用C语言写void InOrder(BiTree Tree)//中序遍历 void creat(BiTree &Tree)//构建二叉树
下面是用C语言实现的中序遍历函数和构建二叉树函数的代码:
```
//定义二叉树结构体
typedef struct BiTNode {
char data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
//中序遍历函数
void InOrder(BiTree Tree) {
if (Tree) {
InOrder(Tree->lchild);
printf("%c ", Tree->data);
InOrder(Tree->rchild);
}
}
//构建二叉树函数(先序遍历输入)
void creat(BiTree &Tree) {
char ch;
scanf("%c", &ch);
if (ch == '#') {
Tree = NULL;
} else {
Tree = (BiTree)malloc(sizeof(BiTNode));
Tree->data = ch;
creat(Tree->lchild);
creat(Tree->rchild);
}
}
```
在构建二叉树时,我们采用先序遍历的方式输入二叉树的结点,如果输入的结点值为`#`,表示该结点为空,否则就创建一个新的结点,并将该结点的左右子树递归构建。在中序遍历时,我们按照“左子树-根结点-右子树”的顺序遍历二叉树,并输出每个结点的值。
阅读全文