请输入实验正确的代码#include"stdio.h" #include"iostream.h" #include"stdlib.h" #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef struct BiTNode { char data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; //BiTree是二叉链表的数据结构,其类型是结构体指针 ///////////////////////////////////////////////////////////////////// //这个函数的功能是以先序方式建立二叉链表, void CreateBiTree(BiTree &T) { char ch; cin>>ch; if (ch=='#')T=NULL; else { T=new BiTNode; T->data=ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } }//CreateBiTree /////////////////////////////////////////////////////////////////// //实验1:先序遍历二叉树的递归算法PreOrderTraverse //////////////////////////////////////////////////////////// ////实验2:中序遍历二叉树的递归算法InOrderTraverse //////////////////////////////////////////////////////////// //实验3:后序遍历二叉树的递归算法PostOrderTraverse ///////////////////////////////////// //实验4:统计二叉树中结点的个数NodeCount ///////////////////////////////////// //实验5:统计二叉树中叶子结点的个数LeafCount ////////////////////////////////////////// int main() { BiTree root; int i; printf("准备以先序方式创建二叉树...,\n请输入各节点数据(如果没有左、右孩子,输入空格):\n"); CreateBiTree(root); printf("\n先序遍历的结果: "); PreOrderTraverse(root); printf("\n中序遍历的结果: "); InOrderTraverse(root); printf("\n后续遍历的结果: "); PostOrderTraverse(root); printf("\n"); printf("\n该树共有%d个结点。\n",NodeCout(root)); printf("\n该树共有%d个叶子。\n",LeafCout(root)); return 0; }
时间: 2023-08-22 11:04:18 浏览: 99
以下是修正后的代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode {
char data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
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 PreOrderTraverse(BiTree T) {
if (T == NULL) {
return;
}
printf("%c ", T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
void InOrderTraverse(BiTree T) {
if (T == NULL) {
return;
}
InOrderTraverse(T->lchild);
printf("%c ", T->data);
InOrderTraverse(T->rchild);
}
void PostOrderTraverse(BiTree T) {
if (T == NULL) {
return;
}
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c ", T->data);
}
int NodeCount(BiTree T) {
if (T == NULL) {
return 0;
}
return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;
}
int LeafCount(BiTree T) {
if (T == NULL) {
return 0;
}
if (T->lchild == NULL && T->rchild == NULL) {
return 1;
}
return LeafCount(T->lchild) + LeafCount(T->rchild);
}
int main() {
BiTree root;
printf("准备以先序方式创建二叉树...\n");
printf("请输入各节点数据(如果没有左、右孩子,输入#):\n");
CreateBiTree(root);
printf("\n先序遍历的结果: ");
PreOrderTraverse(root);
printf("\n中序遍历的结果: ");
InOrderTraverse(root);
printf("\n后序遍历的结果: ");
PostOrderTraverse(root);
printf("\n该树共有%d个结点。\n", NodeCount(root));
printf("该树共有%d个叶子。\n", LeafCount(root));
return 0;
}
修正的主要内容包括:
1. 修改了头文件的引用方式,将iostream.h改为stdio.h。
2. 对函数名进行了修正,将NodeCout改为NodeCount,将LeafCout改为LeafCount。
3. 修改了输入数据的方式,使用scanf代替cin。
4. 修改了输出格式,使其更加清晰易读。
5. 对一些细节进行了修正,比如在CreateBiTree函数中对T进行了动态内存分配,避免了空指针的问题。
阅读全文