二叉树创建问题
二叉树从数组中创建,按照层序遍历的方法,但是当二叉树的结构是一个非完全的,比如只有右子树之类的创建的时候,网上的递归代码往往会漏掉根节点,请问正确的写法应该怎么写啊
以下答案引用自GPT-3大模型,请合理使用:
。
二叉树的创建问题一般来说有两种方法,一种是递归的方法,另一种是非递归的方法。
递归的方法是按照层序遍历的方法,即通过递归来创建二叉树的各个子树,直到创建完整的二叉树。这种方法适用于创建完整的二叉树。
非递归的方法是不通过递归来创建二叉树的各个子树,而是先创建根节点,然后再把根节点作为创建子树的一个参数进行创建,这种方法适用于创建非完整的二叉树。
不知道你这个问题是否已经解决, 如果还没有解决的话:空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
void _tree2str(struct TreeNode* t,char* ptr)
{
if(t == NULL)
return;
char buff[12] = {'\0'};
sprintf(buff,"%d",t->val);
strcat(ptr,buff);
if(t -> left == NULL)
{
if(t->right == NULL)
{
return;
}
else
{
strcat(ptr,"()");
}
}
else
{
strcat(ptr,"(");
_tree2str(t->left,ptr);
strcat(ptr,")");
}
if(t->right == NULL)
{
return;
}
else
{
strcat(ptr,"(");
_tree2str(t->right,ptr);
strcat(ptr,")");
}
}
char* tree2str(struct TreeNode* t) {
char* ptr = (char*)malloc(1024*1024);
_tree2str(t, ptr);
return ptr;
}