这题挺有意思的,开始有好几个问题都没有意识到,自己调试时没调到结果,只是在本地看了一下中间结果,发现对了,后来提交总是出问题。(实际这题牛客网没有检查中间序列化的结果,只看最终反序列化后的树)
发现了自己的几处问题:
1、一开始没有用cur计数,只用了str,它是char*类型,导致在子函数变化过程中,它没有随着子函数的改变
2、 反序列化的程序中,root的节点的构造是在子函数中,当回到主程序中,root原来new出来的节点会丢失,导致内存泄露(即明明new出来的节点的地址复制给root,但却是临时变量,回到主函数,临时变量销毁,导致new出来的内存的地址丢失),所以这时root仍然为空。
应该用个变量保存root的指针的地址,传递root的指针的地址。
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 }; 10 */ 11 class Solution { 12 public: 13 char* Serialize(TreeNode *root) { 14 string s = ""; 15 serl(root, s); 16 char *p = new char[s.size()+1]; 17 int i; 18 for( i=0; i<s.size(); i++) 19 { 20 p[i] = s[i]; 21 } 22 p[i] = '