#include <stdio.h> #include <stdlib.h> #include <string.h> typedef int Status; typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTNode* createBiTNode(char*s, int* i) { char c = s[(*i)++]; if (c == '□') { return NULL; } BiTNode* root = (BiTNode*)malloc(sizeof(BiTNode)); root->data = c; root->lchild = createBiTNode(s, i); root->rchild = createBiTNode(s, i); return root; } // 释放二叉树 Status destroyBiTNode(BiTNode* root) { if (root) { destroyBiTNode(root->lchild); destroyBiTNode(root->rchild); free(root); } return 1; } // 先序遍历 Status preorderTraversal(BiTNode* root) { if (root) { printf("%c ", root->data); preorderTraversal(root->lchild); preorderTraversal(root->rchild); } return 1; } // 中序遍历 Status inorderTraversal(BiTNode* root) { if (root) { inorderTraversal(root->lchild); printf("%c ", root->data); inorderTraversal(root->rchild); } return 1; } // 后序遍历 Status postorderTraversal(BiTNode* root) { if (root) { postorderTraversal(root->lchild); postorderTraversal(root->rchild); printf("%c ", root->data); } return 1; } int main() { char s[] = "AB□C□□D□□"; int i = 0; BiTNode* root = createBiTNode(s, &i); printf("中序遍历结果:"); inorderTraversal(root); printf("\n"); destroyBiTNode(root); return 0; }修改以上程序错误
时间: 2024-01-20 15:02:46 浏览: 109
程序中的二叉树创建函数createBiTNode存在问题,当遇到空节点时,应该返回NULL而不是'B'。修改后的createBiTNode函数应该如下所示:
```
BiTNode* createBiTNode(char*s, int* i) {
char c = s[(*i)++];
if (c == '□') {
return NULL;
}
BiTNode* root = (BiTNode*)malloc(sizeof(BiTNode));
root->data = c;
root->lchild = createBiTNode(s, i);
root->rchild = createBiTNode(s, i);
return root;
}
```
此外,程序中的输出语句可能存在误导。如果想要输出先序遍历、中序遍历和后序遍历的结果,应该在调用对应的遍历函数时进行输出。修改后的main函数应该如下所示:
```
int main() {
char s[] = "AB□C□□D□□";
int i = 0;
BiTNode* root = createBiTNode(s, &i);
printf("先序遍历结果:");
preorderTraversal(root);
printf("\n");
printf("中序遍历结果:");
inorderTraversal(root);
printf("\n");
printf("后序遍历结果:");
postorderTraversal(root);
printf("\n");
destroyBiTNode(root);
return 0;
}
```
阅读全文