序列二叉树和反序列 (不是自己做的)
Posted cgy1012
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列二叉树和反序列 (不是自己做的)相关的知识,希望对你有一定的参考价值。
为什么使用二级指针 ???
可以用一级指针,但是需要用一级指针的引用才行,一级指针的引用和二级指针一回事。比如说你有个数组指针 int *num,这个num现在指向数组第3个元素,
你在函数调用的时候,如果在函数参数传入num的话,你在函数调用里面对num进行++操作,只会影响到这个函数里面,这个函数外面,num的指向的值还是第三个元素。
我们想要函数调用结束后,在函数里面的num++操作会影响到函数外面,则1,可以使用指针的引用。2,使用二级指针,3使用一个全局变量统计num指向第几个元素的信息。
一般啊。二叉树遍历都是 返回值 void ,因此有必要提出来单独去递归;;
有时候比如char* 不好用 想用string 时候可以传进函数去,用完再调回来;
/* 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] = ‘\0‘; 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, ++(*str); //以保证得到递归后指针str指向未被读取的字符 return NULL; int num = 0; while(**str != ‘\0‘ && **str != ‘,‘) //可能几个数代表一个 ,前的都是一个数 num = num*10 + ((**str) - ‘0‘); ++(*str); TreeNode *root = new TreeNode(num); if(**str == ‘\0‘) return root; else (*str)++; root->left = Deserialize(str); root->right = Deserialize(str); return root; ;
以上是关于序列二叉树和反序列 (不是自己做的)的主要内容,如果未能解决你的问题,请参考以下文章