Leetcode 297 序列化和反序列化二叉树
Leetcode 297 Serialize and Deserialize Binary Tree
所以我正在做leetcode 297。由于某种原因,我的反序列化帮助程序函数的 TreeNode 指针不会通过引用传递。我知道人们说我有多愚蠢,因为指针是通过引用自动传递的。但是,我只是无法弄清楚为什么在这种情况下它不会通过引用传递。也许这不是问题所在。请帮助我。这是我的代码:
class Codec {
public:
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
vector<char> solution;
serializeHelper( solution, root );
string result( solution.begin( ), solution.end( ) );
//cout << result << endl;
return result;
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
TreeNode* currentPtr;
TreeNode* root = currentPtr;
int index;
if( data == "" )
return NULL;
deserializeHelper( data, currentPtr, 1 );
//cout << root->left->val;
return root;
}
private:
void deserializeHelper( string data, TreeNode* currentPtr, int index )
{
if( index <= data.length( ) )
{
if( data[index - 1] != '$' )
{
currentPtr = new TreeNode( data[index - 1] - '0' );
deserializeHelper( data, currentPtr->left, ( 2 * index ) );
deserializeHelper( data, currentPtr->right, ( 2 * index ) + 1 );
cout << currentPtr->left << " ";
}
}
}
void serializeHelper( vector<char>& solution, TreeNode* currentPtr )
{
queue<TreeNode*> myQueue;
myQueue.push( currentPtr );
while( !myQueue.empty( ) )
{
currentPtr = myQueue.front( );
if( currentPtr != NULL )
{
myQueue.push( currentPtr->left );
myQueue.push( currentPtr->right );
solution.push_back( currentPtr->val + '0' );
}
if( currentPtr == NULL )
solution.push_back( '$' );
myQueue.pop( );
}
}
};
in
void deserializeHelper( string data, TreeNode* currentPtr, int index )
currentPtr
将使用新地址进行更新。currentPtr
是一个指针。它是一个包含另一个变量地址的变量。另一个变量通过引用传递到deserialzeHelper
currentPtr
因为它是一个指针。currentPtr
本身就不能这样说。
currentPtr
是一个新变量,其中包含函数调用中使用的指针存储的地址副本data
就像一个新变量是第一个参数的副本,index
是最后一个参数的副本一样。
由于您希望更新currentPtr
,因此您需要对源指针本身的引用。
void deserializeHelper( string data, TreeNode* & currentPtr, int index )
我们在这里的地方,可能有优势
void deserializeHelper( const string & data, TreeNode* currentPtr, int index )
以防止复制data
.有时编译器会为你做这件事,但我不愿意在所有编译器中冒险,尤其是在递归函数中,你可以制作数百个副本。
相关文章:
- 从父数组测试用例构造二叉树失败
- 如何知道QDataStream不能反序列化某些内容
- 增强基于 XML class_id的反序列化
- 提升反序列化对象具有 nan 或 -nan 值
- 打印时有二叉树问题.用户输入不打印任何内容
- 如何在 c++ 非托管代码中反序列化 byte[] 的 json 字符串?
- 试图找到二叉树的深度
- 二叉树结构平衡,使用递归时EXC_BAD_ACCESS
- 指向二叉树中新节点的指针
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- 如何反序列化数组?
- C++:如何计算二叉树中其值模块高度小于 2 的节点数?
- 二叉树级别顺序遍历在leetcode中
- 运行无限循环的最小二叉树问题
- 打印二叉树中的常见元素
- 二叉树基准测试结果
- Protobuf中重复字段的问题.使用重复字段进行序列化/反序列化的更好方法是什么?
- 带有矢量重复值的二叉树打印出来
- C++中二维浮点数组的序列化和反序列化
- 如何初始化嵌套结构的unique_ptr(例如二叉树)