#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct TreeNode { char data; // 节点数据 struct TreeNode* left; // 左子树指针 struct TreeNode* right; // 右子树指针 } TreeNode, *Tree; /* 创建二叉树 */ void createTree(char* str, Tree* tree) { if (*str == '\0') { *tree = NULL; return; } if (*tree == NULL) { *tree = (Tree)malloc(sizeof(TreeNode)); } if (*str == '#') { // 空节点 *tree = NULL; } else { (*tree)->data = *str; createTree(str + 2, &((*tree)->left)); // 创建左子树 createTree(str + 4, &((*tree)->right)); // 创建右子树 } } /* 前序遍历 */ void preOrderTraversal(Tree tree) { if (tree == NULL) { return; } printf("%c", tree->data); preOrderTraversal(tree->left); preOrderTraversal(tree->right); } /* 中序遍历 */ void inOrderTraversal(Tree tree) { if (tree == NULL) { return; } inOrderTraversal(tree->left); printf("%c", tree->data); inOrderTraversal(tree->right); } /* 后序遍历 */ void postOrderTraversal(Tree tree) { if (tree == NULL) { return; } postOrderTraversal(tree->left); postOrderTraversal(tree->right); printf("%c", tree->data); } /* 销毁二叉树 */ void freeTree(Tree tree) { if (tree == NULL) { return; } freeTree(tree->left); freeTree(tree->right); free(tree); } /* 主函数 */ int main() { char str[] = {'A','B','#','#','C','#','#','D','#','#'}; Tree tree = NULL; createTree(str, &tree); // 创建二叉树 printf("中序遍历结果:"); inOrderTraversal(tree); // 中序遍历 printf("\n"); freeTree(tree); // 销毁二叉树 return 0; }找出以上程序并修改
时间: 2024-02-01 21:03:35 浏览: 47
以上程序是一段创建二叉树并中序遍历的代码,如果要修改可以根据需求进行修改。下面是对该程序的一些修改建议:
1. 如果要修改为前序遍历或后序遍历,只需要将调用相应遍历函数的语句进行修改即可:
- 前序遍历:preOrderTraversal(tree);
- 中序遍历:inOrderTraversal(tree);
- 后序遍历:postOrderTraversal(tree);
2. 如果要修改为动态输入二叉树的数据,可以使用 scanf 函数实现。例如:
```c
char str[100];
printf("请输入二叉树的结构(如A(B(#,#)C(#,D(#,#)))):");
scanf("%s", str);
Tree tree = NULL;
createTree(str, &tree);
printf("中序遍历结果:");
inOrderTraversal(tree); // 中序遍历
printf("\n");
freeTree(tree); // 销毁二叉树
```
3. 如果要修改为输出所有遍历顺序,可以在主函数中依次调用三种遍历函数即可:
```c
char str[] = {'A','B','#','#','C','#','#','D','#','#'};
Tree tree = NULL;
createTree(str, &tree); // 创建二叉树
printf("前序遍历结果:");
preOrderTraversal(tree); // 前序遍历
printf("\n中序遍历结果:");
inOrderTraversal(tree); // 中序遍历
printf("\n后序遍历结果:");
postOrderTraversal(tree); // 后序遍历
printf("\n");
freeTree(tree); // 销毁二叉树
```
以上是一些修改建议,根据实际需求进行修改即可。
阅读全文