题解 | #序列化二叉树#

序列化二叉树

https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84

利用先序递归法将二叉树转换为字符串
static char stringtree[500]={'\0'};//定义一个全局变量字符串
static int k=0;//标记字符串的当前位置
void string_tree(struct TreeNode* root){
    if(NULL == root){//表示递归到NULL标记这个位置为#并记录一个,
        stringtree[k++]='#';
        stringtree[k++]=',';
        return;
    }
    int d=root->val;//存储当前数结点值
    if(d>=100){//当值大于等于100小于等于150的情况
        stringtree[k++]=49;
        stringtree[k++]=d/10%10+48;
        stringtree[k++]=d%10+48;
    }
    else if(d>10){//当值小于100大于等于10的情况
        stringtree[k++]=d/10+48;
        stringtree[k++]=d%10+48;
    } 
    else{//当值小于10的情况
        stringtree[k++]=d+48;
    }
    stringtree[k++]=',';//标记当前值结束
        //先序遍历
    string_tree(root->left);
    string_tree(root->right);
}

char* Serialize(struct TreeNode* root ) {//主函数
    // write code here
    string_tree(root);//创建字符串
    return stringtree;//返回字符串
}

 
同理,用递归先序法将字符串转换为一个树
static int c=0;//标记字符串的位置
struct TreeNode* Deserialize(char* str ) {
    if(*(str+c) == '#'){//当字符串遇到#时将当前结点返回空
        c+=2;//标记值加2,表示越过#和,
        return NULL;
    }
    struct TreeNode* root=(struct TreeNode*)malloc(sizeof(struct TreeNode));//给每个新节点创建新空间
    root->val=0;//假设当前值为0,方便后续计算
    while(*(str+c)!=','){//当遇到,时表示当前结点值计算完毕
        root->val=root->val*10+*(str+c)-48;
        c++;
    }
    c++;//过滤,位
        //先序遍历
    root->left=Deserialize(str);
    root->right=Deserialize(str);
    return root;
}    


#深信服笔试题二叉树的序列化题解##c#
全部评论

相关推荐

10-01 09:50
门头沟学院 Java
肖先生~:这个人真的很好,点赞
点赞 评论 收藏
分享
牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务