zoukankan      html  css  js  c++  java
  • 序列化二叉树

    题目描述

    请实现两个函数,分别用来序列化和反序列化二叉树
     
    思路是别人的。反正用C++代码写出来的没看明白。倒是Java版本的比较简单!!!
     

    /*
     1. 对于序列化:使用前序遍历,递归的将二叉树的值转化为字符,并且在每次二叉树的结点
    不为空时,在转化val所得的字符之后添加一个' , '作为分割。对于空节点则以 '#' 代替。
     2. 对于反序列化:按照前序顺序,递归的使用字符串中的字符创建一个二叉树(特别注意:
    在递归时,递归函数的参数一定要是char ** ,这样才能保证每次递归后指向字符串的指针会
    随着递归的进行而移动!!!)
    */
     
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    
    class Solution {
    
    public:
        char* Serialize(TreeNode *root) {    
            if(root==NULL)	return NULL;
            string str;
            Serialize(root,str);
            char *ret=new char[str.length()+1];
            int i;
            for(i=0;i<str.length();i++) {
                ret[i]=str[i];
            }
            ret[i]='';
            return ret;
        }
        void Serialize(TreeNode *root,string& str) {
            if(root==NULL) {
                str +='#';
                return ;
            }
            string r=to_string(root->val);
            str +=r;
            str +=',';
            Serialize(root->left,str);
            Serialize(root->right,str);
        }
        
        
        TreeNode* Deserialize(char *str) {
        	if(str==NULL)	return NULL;
            TreeNode *ret=Deserialize(&str);
            
            return ret;
        }
        
        TreeNode* Deserialize(char **str) {
            if(**str=='#') {
                ++(*str);
                return NULL;
            }
            int num=0;
            while(**str!='' && **str!=',') {
                num=num*10+((**str)-'0');
                ++(*str);
            }
            TreeNode *root=new TreeNode(num);
            if(**str == '')
                return root;
            else
                (*str)++;
            root->left =Deserialize(str);
            root->right=Deserialize(str);
        	return root;
        }
    
    };
    

      

    二叉树基础之序列化和反序列化二叉树

    二叉树的序列化和反序列化

    序列化/反序列化二叉树

    拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
  • 相关阅读:
    Meterpreter
    CHM木马
    浅析ARP协议及ARP攻击
    python绝技 — 使用PyGeoIP关联IP地址和物理位置
    python虚拟环境virtualenv的安装与使用
    python调用nmap探测局域网设备
    提权
    Nexpose
    docker安装使用
    一些渗透测试练习环境介绍
  • 原文地址:https://www.cnblogs.com/dd2hm/p/7477534.html
Copyright © 2011-2022 走看看