依靠序列建树
先序序列:
ABC##DE#G##F###
先序建树:
Status CreateTreeByPrio(BiTree& T)
{
//按先序次序输入二叉树结点的值
char ch;
cin >> ch;
if (ch == '#') T = NULL;
else {
T = new BiTNode;
T->data = ch;
CreateTreeByPrio(T->lchild);
CreateTreeByPrio(T->rchild);
}
return 1;
}
中序遍历输出:
C B E G D F A
完整代码:
#include<iostream>
using namespace std;
typedef int Status;
typedef struct BiTNode {
char data;
BiTNode* lchild, * rchild;
}BiTNode,* BiTree;
Status CreateTreeByPrio(BiTree& T)
{
//按先序次序输入二叉树结点的值
char ch;
cin >> ch;
if (ch == '#') T = NULL;
else {
T = new BiTNode;
T->data = ch;
CreateTreeByPrio(T->lchild);
CreateTreeByPrio(T->rchild);
}
return 1;
}
Status CreateTreeByMid(BiTree& T)
{
//按中序次序输入二叉树结点的值
char ch;
cin >> ch;
if (ch == '#') T = NULL;
else {
T = new BiTNode;
CreateTreeByMid(T->lchild);
T->data = ch;
CreateTreeByMid(T->rchild);
}
return 1;
}
Status CreateTreeByPost(BiTree& T)
{
//按后序次序输入二叉树结点的值
char ch;
cin >> ch;
if (ch == '#') T = NULL;
else {
T = new BiTNode;
CreateTreeByPost(T->lchild);
CreateTreeByPost(T->rchild);
T->data = ch;
}
return 1;
}
void MidOrder(BiTree T)
{
if (T != NULL) {
MidOrder(T->lchild);
cout << T->data << ' ';
MidOrder(T->rchild);
}
}
int main()
{
BiTree T;
CreateTreeByPrio(T);
MidOrder(T);
return 0;
}