题目要求
设二叉树采用二叉链表存储结构,结点数据域为字符类型。编写程序,用先序递归遍历法建立二叉树的二叉链表存储结构。然后输入一个字符,输出该字符在先、中、后序遍历中的访问次序(访问次序从1开始)以及先、中、后序遍历结果。若输入的字符不在二叉树中,输出相应提示信息。要求程序可以反复输入字符并输出访问次序及遍历结果,直到输入某个特殊字符时结束程序。注意:输入单个字符时需对其后的换行符进行处理。
数据结构设计
用结构体建立二叉树的二叉链表结构。其中,data表示数据域,lchild表示左指针,rchild表示右指针,BiT表示二叉链表结构体指针类型变量,BiTNode表示二叉链表结构体类型变量。
算法设计简要描述
1. 先序遍历建立二叉树:递归调用函数,不断读取字符,依次建立左子树和右子树,当读取到‘#’字符时,返回NULL指针,最终返回根结点指针。
2. 查询字符是否在二叉树中:在while循环中,反复输入字符,依次输出先序、中序、后序遍历结果,并判断该字符是否在二叉树中。
程序代码
#include <iostream>
using namespace std;
typedef struct node //二叉链表
{
ElemTp data; //数据域
struct node *lchild, //左指针
*rchild; //右指针
}*BiT, BiTNode;
void visit(BiT e) //访问函数
{
if (e->data != NULL) //输出二叉树的数据域
cout << e->data << " ";
}
void preorder(BiT bt) //先序遍历二叉树
{
if (bt)