创建名为Traverse工程及同名C++SourceFile(C++源文件)。2)初始化一个数据元素为字符串类型的二叉树,并对其实现创建及先序、中序、后序三种遍历。示例:给定二叉树ABDF###E##C##ABCDEF返回它的先序遍历、中序遍历、后序遍历序列,如下图所示。实现思路及步骤(注意:使用变量不要忘记添加变量的声明):A、类型定义二叉链表存储结构;p127B、基本操作1)创建一棵二叉树voidCreatBiTree(BiTree*T);p1311、提取用户输入值x; 2、判断用户输入值是否为#,3、若为#则建立空子树;4、若不为#,创建新的结点空间存储根结点,其data值为c,左子树,右子树递归调用CreatBiTree函数。2)二叉树的遍历判;p1291、二叉树的先序遍历:1)先访问并输出根节点,在采用相同方法递归遍历其左子树及右子树。2、二叉树的中序遍历;1)先递归遍历其左子树,后访问并输出根节点,最后采用相同方法递归遍历其右子树。3、二叉树的后序遍历:1)先递归遍历其左子树及右子树,后访问并输出根节点。
时间: 2023-12-10 15:39:18 浏览: 105
使用C++链表实现二叉树的存储及基本操作
很高兴为您解答!下面是Traverse工程及同名C++SourceFile的实现思路和步骤:
1.类型定义二叉链表存储结构
定义二叉树的存储结构如下:
```cpp
typedef struct BiTNode{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
```
其中,data为节点的数据元素,lchild和rchild为左右子树指针。
2.创建一棵二叉树
采用递归的方法创建二叉树,具体实现如下:
```cpp
void CreatBiTree(BiTree *T){
char c;
scanf("%c", &c);
if (c == '#') {
*T = NULL;
} else {
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = c;
CreatBiTree(&((*T)->lchild));
CreatBiTree(&((*T)->rchild));
}
}
```
其中,先输入一个字符c,若c为“#”则说明当前节点为空,否则创建新节点并递归调用CreatBiTree函数。
3.二叉树的遍历
(1)二叉树的先序遍历
先访问并输出根节点,再递归遍历其左子树及右子树。
```cpp
void PreOrderTraverse(BiTree T){
if (T) {
printf("%c", T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
```
(2)二叉树的中序遍历
先递归遍历其左子树,再访问并输出根节点,最后采用相同方法递归遍历其右子树。
```cpp
void InOrderTraverse(BiTree T){
if (T) {
InOrderTraverse(T->lchild);
printf("%c", T->data);
InOrderTraverse(T->rchild);
}
}
```
(3)二叉树的后序遍历
先递归遍历其左子树及右子树,再访问并输出根节点。
```cpp
void PostOrderTraverse(BiTree T){
if (T) {
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c", T->data);
}
}
```
4.完整代码
```cpp
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
void CreatBiTree(BiTree *T){
char c;
scanf("%c", &c);
if (c == '#') {
*T = NULL;
} else {
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = c;
CreatBiTree(&((*T)->lchild));
CreatBiTree(&((*T)->rchild));
}
}
void PreOrderTraverse(BiTree T){
if (T) {
printf("%c", T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T){
if (T) {
InOrderTraverse(T->lchild);
printf("%c", T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T){
if (T) {
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c", T->data);
}
}
int main(){
BiTree T;
printf("请输入二叉树字符串:\n");
CreatBiTree(&T);
printf("先序遍历结果:");
PreOrderTraverse(T);
printf("\n中序遍历结果:");
InOrderTraverse(T);
printf("\n后序遍历结果:");
PostOrderTraverse(T);
printf("\n");
return 0;
}
```
阅读全文