DS二叉树—二叉树构建与遍历(不含框架)
题目描述
给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘#’表示,例如AB#C##D##),建立该二叉树的二叉链式存储结构,并输出该二叉树的先序遍历、中序遍历和后序遍历结果。
输入
第一行输入一个整数t,表示有t个二叉树
第二行起输入每个二叉树的先序遍历结果,空树用字符‘#’表示,连续输入t行。
输出
输出每个二叉树的先序遍历、中序遍历和后序遍历结果。
样例输入
2
AB#C##D##
AB##C##
样例输出
ABCD
BCAD
CBDA
ABC
BAC
BCA
#include <iostream>
using namespace std;
class BiNode{
char data;
BiNode *lChild;
BiNode *rChild;
public:
BiNode():lChild(NULL),rChild(NULL){}
BiNode(char e):data(e),lChild(NULL),rChild(NULL){}
~BiNode(){delete lChild;delete rChild;}
friend class BiTree;
};
class BiTree{
BiNode *root;
void CreateTree(BiNode *&t);
void PreOrder(BiNode *t);
void MidOrder(BiNode *t);
void PostOrder(BiNode *t);
public:
BiTree():root(NULL){}
~BiTree(){delete root;}
void CreateTree();
void PreOrder();
void MidOrder();
void PostOrder();
};
void BiTree::CreateTree(BiNode *&t) {
char c;
cin>>c;
if(c != '#')
{
t = new BiNode(c);
CreateTree(t->lChild);
CreateTree(t->rChild);
}
else
t = NULL;
}
void BiTree::CreateTree() {
CreateTree(root);
}
void BiTree::PreOrder(BiNode *t) {
if(t)
{
cout<<t->data;
PreOrder(t->lChild);
PreOrder(t->rChild);
}
}
void BiTree::PreOrder() {
PreOrder(root);
cout<<endl;
}
void BiTree::MidOrder(BiNode *t) {
if(t)
{
MidOrder(t->lChild);
cout<<t->data;
MidOrder(t->rChild);
}
}
void BiTree::MidOrder() {
MidOrder(root);
cout<<endl;
}
void BiTree::PostOrder(BiNode *t) {
if(t)
{
PostOrder(t->lChild);
PostOrder(t->rChild);
cout<<t->data;
}
}
void BiTree::PostOrder() {
PostOrder(root);
cout<<endl;
}
int main()
{
int t;
cin>>t;
while (t--)
{
BiTree myTree;
myTree.CreateTree();
myTree.PreOrder();
myTree.MidOrder();
myTree.PostOrder();
}
}
来源:CSDN
作者:~澄~
链接:https://blog.csdn.net/luoyeliufeng/article/details/103592211