你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。
空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
void _tree2str(struct TreeNode* t,char* str)
{
if(t == NULL)
return ;
char buff[12];//12是数字的位数,编译器最大应该就到12
sprintf(buff,"%d",t->val);
strcat(str,buff);
//左子树
if(t->left == NULL)
{
if(t->right == NULL)
return ;
else
strcat(str,"()");
}
else
{
strcat(str,"(");
_tree2str(t->left,str);
strcat(str,")");
}
//右子树
if(t->right == NULL)
{
return ;
}
else
{
strcat(str,"(");
_tree2str(t->right,str);
strcat(str,")");
}
}
char* tree2str(struct TreeNode* t)
{
char* str = (char*)malloc(1024*1024);
_tree2str(t,str);
return str;
}