题目描述
给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构,并输出该二叉树的先序遍历、中序遍历和后序遍历结果
输入
第一行输入一个整数t,表示有t个二叉树
第二行起输入每个二叉树的先序遍历结果,空树用字符‘0’表示,连续输入t行
输出
输出每个二叉树的先序遍历、中序遍历和后序遍历结果
样例输入
2
AB0C00D00
AB00C00
样例输出
ABCD
BCAD
CBDA
ABC
BAC
BCA
采用递归建树的方法,先序遍历、中序遍历、后序遍历的原理一样,这里只实现先序
#include<iostream> #include<string> using namespace std; class BitreeNode { public: char data; BitreeNode *left; BitreeNode *right; BitreeNode():left(NULL),right(NULL){} ~BitreeNode(){} }; class Bitree { private: BitreeNode *Root; int pos; string strtree; BitreeNode *CreateBitree(); void PreOrder(BitreeNode *t); void InOrder(BitreeNode *t); void PostOrder(BitreeNode *t); public: Bitree() {}; ~Bitree() {}; void CreateTree(string TreeArray); void PreOrder(); void InOrder(); void PostOrder(); }; void Bitree::CreateTree(string treearray) { pos = 0; strtree.assign(treearray); Root = CreateBitree(); } BitreeNode *Bitree::CreateBitree() { BitreeNode *T; char ch; ch = strtree[pos++]; if (ch == '0') T = NULL; else { T = new BitreeNode(); T->data = ch; T->left = CreateBitree(); T->right = CreateBitree(); } return T; } void Bitree::PreOrder() { PreOrder(Root); } void Bitree::PreOrder(BitreeNode *t) { if (t) { cout << t->data; PreOrder(t->left); PreOrder(t->right); } } int main() { int t; cin >> t; while (t--) { string str; cin >> str; Bitree *tree; tree = new Bitree(); tree->CreateTree(str); tree->PreOrder(); cout << endl; } }