从一棵二叉树复制到另一棵
Copying from one binary tree to another
我正在尝试编写各种方法来创建二叉树,其中之一是从现有二叉树复制方法
从矢量创建树
binary_tree::binary_tree(const std::vector<int> &values)
{
for(int i = 0; i < 5; i++)
{
insert(values[i]);
}
}
正在插入节点
void insertnode(node **tree, int value)
{
if (*tree == nullptr)
{
*tree = new node;
(*tree)->data = value;
(*tree)->left = nullptr;
(*tree)->right = nullptr;
}
else
if(value < (*tree)->data)
{
insertnode(&(*tree)->left, value);
}
else if(value > (*tree)->data)
{
insertnode(&(*tree)->right, value);
}
else
return;
}
void binary_tree::insert(int value)
{
insertnode(&tree, value);
}
复制方法
binary_tree::binary_tree(const binary_tree &rhs)
{
copyTree(tree2, tree);
}
void copyTree(node *& tree2, node *& tree)
{
if(tree == NULL)
{
tree2 = NULL;
}
else
{
tree2 = new node;
tree2->data = tree->data;
copyTree(tree2->left, tree->left);
//cout << tree2->data << " ";
copyTree(tree2->right, tree->right);
}
}
打印方式
std::string binary_tree::inorder() const
{
inorderof(tree);
std::string back2 = back.substr(0, back.length()-1);
back = "";
return std::string(back2);
void inorderof(node *tree)
{
if(tree != nullptr)
{
inorderof(tree->left);
back += to_string(tree->data);
back += " ";
inorderof(tree->right);
}
}
主要
int main(int argc, char **argv)
{
tree = new binary_tree(vector<int>{10, 5, 12, 15, 8});
tree->inorder();
binary_tree *tree2 = new binary_tree(*tree);
tree2->inorder();
}
我的问题是我必须复制初始树 - 它可以完美构建和打印 - 并使用
复制它
binary_tree::binary_tree(const binary_tree &rhs)
方法,但是当复制树时我遇到了一些未解决的外部错误。
我曾尝试在不使用上述有效方法的情况下复制树,但是必须将初始二叉树作为参数传递给此方法让我很困惑,我不知道从那里去哪里。我必须使用这个确切的方法声明作为赋值的一部分,否则我不会这样做!
错误信息:
error LNK2019: unresolved external symbol "public: void __thiscall
binary_tree::copyTree(struct node * &,struct node * &)"
(?copyTree@binary_tree@@QAEXAAPAUnode@@0@Z) referenced in function
"public: __thiscall binary_tree::binary_tree(class binary_tree const
&)" (??0binary_tree@@QAE@ABV0@@Z)
它在您发布的代码中不可见,但我很确定您的 header 包含如下内容:
class binary_tree {
...
void copyTree(node *& tree2, node *& tree);
...
}
并且在您的源文件中您有:
void copyTree(node *& tree2, node *& tree)
{
if(tree == NULL)
{
tree2 = NULL;
}
else
{
tree2 = new node;
tree2->data = tree->data;
copyTree(tree2->left, tree->left);
//cout << tree2->data << " ";
copyTree(tree2->right, tree->right);
}
}
您可以通过将源文件中的签名更改为:
来解决此问题
void binary_tree::copyTree(node *& tree2, node *& tree) {...}
或从 header 中删除它(如果您选择此路径,请确保 copyTree
在使用之前在源代码中定义(或至少声明)(binary_tree(const binary_tree &rhs)
).
我正在尝试编写各种方法来创建二叉树,其中之一是从现有二叉树复制方法
从矢量创建树
binary_tree::binary_tree(const std::vector<int> &values)
{
for(int i = 0; i < 5; i++)
{
insert(values[i]);
}
}
正在插入节点
void insertnode(node **tree, int value)
{
if (*tree == nullptr)
{
*tree = new node;
(*tree)->data = value;
(*tree)->left = nullptr;
(*tree)->right = nullptr;
}
else
if(value < (*tree)->data)
{
insertnode(&(*tree)->left, value);
}
else if(value > (*tree)->data)
{
insertnode(&(*tree)->right, value);
}
else
return;
}
void binary_tree::insert(int value)
{
insertnode(&tree, value);
}
复制方法
binary_tree::binary_tree(const binary_tree &rhs)
{
copyTree(tree2, tree);
}
void copyTree(node *& tree2, node *& tree)
{
if(tree == NULL)
{
tree2 = NULL;
}
else
{
tree2 = new node;
tree2->data = tree->data;
copyTree(tree2->left, tree->left);
//cout << tree2->data << " ";
copyTree(tree2->right, tree->right);
}
}
打印方式
std::string binary_tree::inorder() const
{
inorderof(tree);
std::string back2 = back.substr(0, back.length()-1);
back = "";
return std::string(back2);
void inorderof(node *tree)
{
if(tree != nullptr)
{
inorderof(tree->left);
back += to_string(tree->data);
back += " ";
inorderof(tree->right);
}
}
主要
int main(int argc, char **argv)
{
tree = new binary_tree(vector<int>{10, 5, 12, 15, 8});
tree->inorder();
binary_tree *tree2 = new binary_tree(*tree);
tree2->inorder();
}
我的问题是我必须复制初始树 - 它可以完美构建和打印 - 并使用
复制它 binary_tree::binary_tree(const binary_tree &rhs)
方法,但是当复制树时我遇到了一些未解决的外部错误。
我曾尝试在不使用上述有效方法的情况下复制树,但是必须将初始二叉树作为参数传递给此方法让我很困惑,我不知道从那里去哪里。我必须使用这个确切的方法声明作为赋值的一部分,否则我不会这样做!
错误信息:
error LNK2019: unresolved external symbol "public: void __thiscall binary_tree::copyTree(struct node * &,struct node * &)" (?copyTree@binary_tree@@QAEXAAPAUnode@@0@Z) referenced in function "public: __thiscall binary_tree::binary_tree(class binary_tree const &)" (??0binary_tree@@QAE@ABV0@@Z)
它在您发布的代码中不可见,但我很确定您的 header 包含如下内容:
class binary_tree {
...
void copyTree(node *& tree2, node *& tree);
...
}
并且在您的源文件中您有:
void copyTree(node *& tree2, node *& tree)
{
if(tree == NULL)
{
tree2 = NULL;
}
else
{
tree2 = new node;
tree2->data = tree->data;
copyTree(tree2->left, tree->left);
//cout << tree2->data << " ";
copyTree(tree2->right, tree->right);
}
}
您可以通过将源文件中的签名更改为:
来解决此问题void binary_tree::copyTree(node *& tree2, node *& tree) {...}
或从 header 中删除它(如果您选择此路径,请确保 copyTree
在使用之前在源代码中定义(或至少声明)(binary_tree(const binary_tree &rhs)
).