#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <time.h>
#define KEY(n) (n?n->key:-1)
using namespace std;
typedef struct Node{
int key;
Node *lchild,*rchild;
}Node;
Node *getNewNode(int val){
Node *p=(Node*)malloc(sizeof(Node));
p->key=val;
p->lchild=p->rchild=NULL;
return p;
}
Node *insert(Node *root,int key){
if(!root)return getNewNode(key);
if(rand()%2)root->lchild=insert(root->lchild,key);
else root->rchild=insert(root->rchild,key);
return root;
}
Node *getRandomBinaryTree(int n){
Node *root=NULL;
for(int i=0;i<n;i++){
root=insert(root,rand()%100);
}
return root;
}
void clear(Node *root){
if(!root)return ;
clear(root->lchild);
clear(root->rchild);
free(root);
return ;
}
char buff[1000];
int len=0;
void __serialize(Node *root){
if(!root)return ;
len+=snprintf(buff+len,100,"%d",root->key);
if(!root->lchild&&!root->rchild)return ;
len+=snprintf(buff+len,100,"(");
__serialize(root->lchild);
if(root->rchild){
len+=snprintf(buff+len,100,",");
__serialize(root->lchild);
}
len+=snprintf(buff+len,100,")");
return ;
}
void serialize(Node *root){
memset(buff,0,sizeof(buff));
len=0;
__serialize(root);
return ;
}
void print(Node *root){
printf("%d(%d,%d)\n",KEY(root)
,KEY(root->lchild)
,KEY(root->rchild));
return ;
}
void output(Node *root){
if(!root)return ;
print(root);
output(root->lchild);
output(root->rchild);
return ;
}
#define MAX_NODE 10
int main(){
srand(time(0));
Node *root=getRandomBinaryTree(MAX_NODE);
serialize(root);
output(root);
printf("buff[]:%s\n",buff);
return 0;
}