用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 09:04:32 浏览: 61
以下是用 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` 的值。同时,为了避免结构体指针的取值和成员访问符号的优先级问题,对其进行了括号处理。
相关问题
用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);
}
}
```
在构建二叉树时,我们采用先序遍历的方式输入二叉树的结点,如果输入的结点值为`#`,表示该结点为空,否则就创建一个新的结点,并将该结点的左右子树递归构建。在中序遍历时,我们按照“左子树-根结点-右子树”的顺序遍历二叉树,并输出每个结点的值。
void InOrder(BiTree Tree)//中序遍历 void creat(BiTree &Tree)//构建二叉树的函数使用C语言编程
以下是使用C语言编写的中序遍历和构建二叉树的函数实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点类型定义
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode, *BiTree;
// 中序遍历二叉树
void InOrder(BiTree Tree) {
if (Tree == NULL) {
return;
}
InOrder(Tree->left);
printf("%d ", Tree->val);
InOrder(Tree->right);
}
// 构建二叉树
void creat(BiTree &Tree) {
int val;
scanf("%d", &val);
if (val == -1) {//输入-1表示该节点为空
Tree = NULL;
} else {
Tree = (BiTree)malloc(sizeof(TreeNode));
Tree->val = val;
creat(Tree->left);
creat(Tree->right);
}
}
int main() {
// 构建二叉树
BiTree Tree;
creat(Tree);
// 中序遍历二叉树并输出
printf("InOrder: ");
InOrder(Tree);
printf("\n");
return 0;
}
```
在`InOrder`函数中,通过递归遍历二叉树,先遍历左子树,再输出当前结点值,最后遍历右子树。在`creat`函数中,通过递归构建二叉树,先读入当前结点的值,若该值为-1,则表示该结点为空,返回NULL;否则,创建一个新的结点,设置其值为当前读入的值,并递归构建其左右子树。在`main`函数中,我通过调用`creat`函数构建一个二叉树,并调用`InOrder`函数中序遍历该二叉树并输出遍历结果。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)