建立二叉树的一种方式
#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; }