建立二叉树的一种方式
#include <stdio.h>
#include <iostream>
#include <stack>
#include <string>
using namespace std;
string s;
int kase;
typedef struct node
{
char data;
node* Lchild;
node* Rchild;
int len;
int childnum;
node( int l )
{
data = s[l-1];
Lchild = NULL;
Rchild = NULL;
len = l-1;
childnum = 0;
}
} TreeNode, *BinTree;
stack<BinTree> st;
BinTree Rebuild()
{
cin >> s;
BinTree root = new TreeNode(s.size());
st.push( root );
while( cin >> s )
{
if( s[0] == '0' )
break;
BinTree cur = new TreeNode( s.size() );
BinTree tmp = st.top();
while( tmp->len - cur->len != -1 )
{
st.pop();
tmp = st.top();
}
if( cur->data == '*' )
{
tmp->Lchild = NULL;
tmp->childnum++;
continue;
}
if( tmp->childnum == 0 )
{
tmp->Lchild = cur;
tmp->childnum++;
}
else if( tmp->childnum == 1 )
{
tmp->Rchild = cur;
tmp->childnum++;
}
else if( tmp->childnum == 2 )
{
st.pop();
}
st.push( cur );
}
return root;
}
void Pre( BinTree root )
{
if( root == NULL )
return ;
printf("%c", root->data );
Pre( root->Lchild );
Pre( root->Rchild );
}
void In( BinTree root )
{
if( root == NULL )
return;
In( root->Lchild );
printf("%c", root->data );
In( root->Rchild );
}
void Post( BinTree root )
{
if( root == NULL )
return;
Post( root->Lchild );
Post( root->Rchild );
printf("%c", root->data );
}
int main()
{
scanf("%d", &kase);
while( kase-- )
{
while( !st.empty() )
st.pop();
BinTree ans = Rebuild();
Pre( ans );
printf("\n");
Post( ans );
printf("\n");
In( ans );
printf("\n\n");
}
return 0;
}