【发布时间】:2019-01-26 23:59:43
【问题描述】:
所以我正在做 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( );
}
}
};
【问题讨论】:
-
您应该将
std::string作为const引用传递。这避免了复制整个结构的需要。 -
不,指针不会通过引用自动传递,我不确定您为什么会这样认为。如果您没有明确使用
&,您将获得一份副本。
标签: c++ pointers binary-tree