Description
1、问题描述
给定一棵按“先根”遍历存储表示的二叉树,请中根遍历这棵二叉树。
2、二叉树创建说明
⑴、按“先根”遍历存储表示的二叉树中,如果在遍历过程中,发现子树为空,输出0
⑵、例如:A有B子树,没有右子树,其“先根”遍历为A B 0 0 0
⑶、例如:A为根,B为A的右孩子;C为B的左孩子,D为B的右孩子,其“先根”遍历为A 0 B C 0 0 D 0 0
Input
第一行:先根遍历的二叉树结点数目(包括空结点)
第二行:n个“先根”遍历二叉树字符序列(用空格隔开)(字符0表示空结点)
Output
第一行:二叉树的中根遍历序列(结点用空格隔开)(最后一个结点之后也留有空格)
Sample Input
9
A 0 B C 0 0 D 0 0
Sample Output
A C B D
#include <iostream>
using namespace std;
#include <string>
const int Max = 30;
class BiTreeNode{
public:
char data;
BiTreeNode *lchild;
BiTreeNode *rchild;
BiTreeNode():lchild(NULL), rchild(NULL){}
};
class BiTree{
public:
BiTreeNode *root;
char strTree[Max];
BiTreeNode *CreateBiTree();
void PreOrder(BiTreeNode *t);
void InOrder(BiTreeNode *t);
void PostOrder(BiTreeNode *t);
int pos;
public:
BiTree(){};
void CreateTree(char TreeArray[],int n);
void InOrder();
};
void BiTree::CreateTree(charTreeArray[],int n)
{
pos = 0; int i;
for(i = 0;i < n;i++)
strTree[i] = TreeArray[i];
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->lchild = CreateBiTree();
T->rchild = CreateBiTree();
}
return T;
}
void BiTree::InOrder()
{
InOrder(root);
}
void BiTree::InOrder(BiTreeNode *t)
{
if(t)
{
InOrder(t->lchild);
cout<<t->data<<" ";
InOrder(t->rchild);
}
}
int main()
{
int i,n;
char str[Max];
BiTree t;
//freopen("cin1.txt", "r", stdin);
cin>>n;
for(i = 0;i < n; i++)
cin>>str[i];
t.CreateTree(str, n);
t.InOrder();
cout<<endl;
return 0;
}