b=(BiTree)malloc(sizeof(BiTnode));
时间: 2023-06-16 21:06:17 浏览: 77
这段代码是在动态分配一个二叉树节点的内存空间,并将其地址赋值给指针变量 b。具体来说,malloc 函数分配的内存空间大小为 sizeof(BiTnode) 字节,即 BiTnode 结构体的大小。而 (BiTree) 是对 malloc 返回的 void* 类型指针进行强制类型转换,将其转换为 BiTree 类型,即二叉树节点指针类型。最后,将分配到的内存地址赋值给指针变量 b,使其指向该节点。
相关问题
用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; } }
以下是用 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<malloc.h> typedef struct Node { char data; struct Node* LChild; struct Node* RChild; } BiTNode, * BiTree; void InitList(BiTree* l) { *l = (BiTree)malloc(sizeof(BiTNode)); (*l)->LChild = NULL; (*l)->RChild = NULL; } void CreateBiTree(BiTree* bt) { char ch; ch = getchar(); if (ch == ' ') *bt = NULL; else { *bt = (BiTree)malloc(sizeof(BiTNode)); (*bt)->data = ch; CreateBiTree(&((*bt)->LChild)); CreateBiTree(&((*bt)->RChild)); } } void PreOrder(BiTree root)//先序遍历 { if (root != NULL) { printf("%c", root->data); PreOrder(root->LChild); PreOrder(root->RChild); } } void InOrder(BiTree root)//中序遍历 { if (root != NULL) { InOrder(root->LChild); printf("%c", root->data); InOrder(root->RChild); } } void PostOrder(BiTree root)//后序遍历 { if (root != NULL) { PostOrder(root->LChild); PostOrder(root->RChild); printf("%c", root->data); } } int main() { BiTree bt; InitList(&bt); CreateBiTree(&bt); PreOrder(bt); printf("\n"); InOrder(bt); printf("\n"); PostOrder(bt); printf("\n"); system("pause"); }修改
以下是修改后的代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Node {
char data;
struct Node* LChild;
struct Node* RChild;
} BiTNode, * BiTree;
void InitTree(BiTree* T) {
*T = NULL;
}
void CreateBiTree(BiTree* T) {
char ch;
scanf("%c", &ch);
if (ch == ' ') {
*T = NULL;
}
else {
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = ch;
CreateBiTree(&((*T)->LChild));
CreateBiTree(&((*T)->RChild));
}
}
void PreOrder(BiTree T) //先序遍历
{
if (T != NULL) {
printf("%c", T->data);
PreOrder(T->LChild);
PreOrder(T->RChild);
}
}
void InOrder(BiTree T) //中序遍历
{
if (T != NULL) {
InOrder(T->LChild);
printf("%c", T->data);
InOrder(T->RChild);
}
}
void PostOrder(BiTree T) //后序遍历
{
if (T != NULL) {
PostOrder(T->LChild);
PostOrder(T->RChild);
printf("%c", T->data);
}
}
int main() {
BiTree T;
InitTree(&T);
CreateBiTree(&T);
PreOrder(T);
printf("\n");
InOrder(T);
printf("\n");
PostOrder(T);
printf("\n");
return 0;
}
主要修改如下:
1. InitList 改为 InitTree,因为我们是在初始化一棵树。
2. getchar() 改为 scanf("%c", &ch),因为 getchar() 会读取缓冲区的字符,可能会导致输入不完整。
3. main 函数需要加上 return 0;。
另外,建议在 CreateBiTree 函数中加上 fflush(stdin); 语句,以清除输入缓冲区中的多余字符。