#include<iostream>
#define maxSize 20
using namespace std;
typedef char TElemType;
typedef struct {
TElemType data[maxSize];
int n;
}SqBTree;
typedef struct node {
TElemType data;
struct node*lchild, *rchild;
}BitNode,BinTree;
void InOrderRecur(BitNode*BT)
{
if (BT != NULL)
{
InOrderRecur(BT->lchild);
cout << BT->data << " ";
InOrderRecur(BT->rchild);
}
}
void PreOrderRecur(BitNode*BT)
{
if(BT != NULL) {
cout << BT->data << " ";
PreOrderRecur(BT->lchild);
PreOrderRecur(BT->rchild);
}
}
void PostOrderRecur(BitNode*BT)
{
if (BT != NULL)
{
PostOrderRecur(BT->rchild);
PostOrderRecur(BT->rchild);
cout << BT->data << " ";
}
}
void CreateBinTreePre(BitNode*&T, TElemType pre[], int&n)
{
TElemType ch = pre[n++];
if (ch == ';')return;
if (ch != '#')
{
T = new BitNode;
T->data = ch;
CreateBinTreePre(T->lchild, pre, n);
CreateBinTreePre(T->rchild, pre, n);
}
else T=NULL;
}
void PrintBinTree(BitNode*root)
{
if (root != NULL)
{
cout << root->data;
if (root->lchild != NULL || root->rchild != NULL)
{
cout << '(';
PrintBinTree(root->lchild);
cout << ',';
PrintBinTree(root->rchild);
cout << ')';
}
}
}
void ClearBinTree(BitNode*root)
{
if (root != NULL)
{
ClearBinTree(root->lchild);
ClearBinTree(root->rchild);
delete root;
root = NULL;
}
}
int Height(BitNode*BT)
{
if (BT == NULL)return 0;
else {
int i = Height(BT->lchild);
int j = Height(BT->rchild);
return i >= j ? i + 1 : j + 1;
}
}
BitNode*GetParent(BitNode*BT, BitNode*p)
{
if (BT == NULL)return NULL;
if (BT->lchild == p || BT->rchild == p)return BT;
BitNode*s = GetParent(BT->lchild, p);
if (s!=NULL)return s;
else return s = GetParent(BT->rchild, p);
}
int main()
{
char ch[] = "ABC##D#E###;";
BitNode*root;
int n = 0;
CreateBinTreePre(root, ch, n);
PreOrderRecur(root);
PrintBinTree(root);
cout << Height(root);
system("pause");
}