题目描述
给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘#’表示,例如AB#C##D##),建立该二叉树的二叉链式存储结构,并输出该二叉树的先序遍历、中序遍历和后序遍历结果。
输入
第一行输入一个整数t,表示有t个二叉树
第二行起输入每个二叉树的先序遍历结果,空树用字符‘#’表示,连续输入t行。
输入样例:
2
AB#C##D##
AB##C##
输出
输出每个二叉树的先序遍历、中序遍历和后序遍历结果。
输出样例:
ABCD
BCAD
CBDA
ABC
BAC
BCA
代码
#include <iostream>
using namespace std;struct Node{char data;Node *left;Node *right;
};class Tree{
public:Node *root; //树的根节点void create(Node *&t){ //!! 创建树时一定要加& !!char c;cin >> c;if(c == '#'){t = NULL;}else{t = new Node;t->data = c;create(t->left);create(t->right);}}void DLR(Node *t){ //先序遍历if(t == NULL){return;}else{cout << t->data;DLR(t->left);DLR(t->right);}}void LDR(Node *t){ //中序遍历if(t == NULL){return;}else{LDR(t->left);cout << t->data;LDR(t->right);}}void LRD(Node *t){ //后序遍历if(t == NULL){return;}else{LRD(t->left);LRD(t->right);cout << t->data;}}
};int main()
{int t;cin >> t;while(t--){Tree tree;tree.create(tree.root);tree.DLR(tree.root);cout << endl;tree.LDR(tree.root);cout << endl;tree.LRD(tree.root);cout << endl;}return 0;
}