7-1 玩转二叉链表 (20分)
设计程序,按先序创建二叉树的二叉链表;然后先序、中序、后序遍历二叉树。
输入格式:
按先序输入一棵二叉树。二叉树中每个结点的键值用字符表示,字符之间不含空格。注意空树信息也要提供,以#字符表示空树。
输出格式:
输出3行。第一行是先序遍历二叉树的序列,第二行是中序遍历二叉树的序列,第三行是后序遍历二叉树的序列。每行首尾不得有多余空格。序列中不含#。
输入样例:
ab##dc###
输出样例:
abdc
bacd
bcda
答案样例:
//巧妙地用到了填空题第一题的代码
//如果自己去写主要是建表大的地方
//需要仔细思考一下
#include<iostream>
using namespace std;
typedef struct BiNode {
char data;
struct BiNode *lchild,*rchild;
} BiTNode,*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);
}
}
void PreOrderTraverse(BiTree T) {//前序输出
if(T) {
cout << T->data;
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T) {//中序输出
if(T) {
InOrderTraverse(T->lchild);
cout << T->data;
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T) {//后序输出
if(T) {
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout << T->data;
}
}
int main() {
BiTree tree;
CreateBiTree(tree);
PreOrderTraverse(tree);
cout << endl;//注意换行
InOrderTraverse(tree);
cout << endl;//注意换行
PostOrderTraverse(tree);
return 0;
}
感谢你的点赞❤⭐
哔哩哔哩/bilibili:羊卓的杨
公众号:羊卓的杨(后期上线实验报告功能)