【问题标题】:Binary Search Tree Copy Constructor | C++ [closed]二叉搜索树复制构造函数 | C++ [关闭]
【发布时间】:2020-11-19 18:54:28
【问题描述】:
BST::BST()

{
    
root = nullptr;

}

BST::BST(const BST& rhs)

{

    root = rhs.root;
    root->left = rhs.root->left;
    root->left = rhs.root->left;


    TreeNode* DeepCopy = new TreeNode;
    if (root != nullptr)
    {
        DeepCopy->info = rhs.root->info;
        DeepCopy->left = rhs.root->left;
        DeepCopy->right = rhs.root->right;
    }

// Will this make a deep copy of the entire tree?

}

【问题讨论】:

  • // Will this make a deep copy of the entire tree? 看起来不是这样。
  • 你真的需要拷贝构造函数吗?另外,决定是复制节点还是与现有节点建立更多链接?智能指针?
  • DeepCopy 是一个局部变量。你对它所做的一切都不会影响其他任何事情。该对象不会在函数结束时被删除,但您也没有引用它,也无法获得任何引用。这是造成泄漏的一种代价高昂的方法

标签: c++ binary-search-tree copy-constructor deep-copy


【解决方案1】:

没有。黄金法则,复制指针是复制指针,而不是指针指向的内容。初学者经常对此感到困惑。

编写深度复制复制构造函数的一种方法是编写一个普通的递归例程,该例程复制树结构并从您的复制构造函数调用该例程。像这样的

BST::BST(const BST& rhs) : root(deep_copy(rhs.root))
{
}

// recursive routine to copy the tree structure
friend TreeNode* deep_copy(TreeNode* rhs)
{
    if (rhs)
    {
        TreeNode* lhs = new TreeNode();
        lhs->info = rhs->info;
        lhs->left = deep_copy(rhs->left);
        lhs->right = deep_copy(rhs->right);
        return lhs;
    }
    else
    {
        return nullptr;
    }
}

【讨论】:

    猜你喜欢
    • 2018-09-09
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    相关资源
    最近更新 更多