我的二进制搜索树(BST)的复制构造函数存在问题。
特别是在第一次传递复制构造函数时。我测试了我的insert300
函数,它们运行得很好。当我进入复制构造函数时,我的私有insert300
函数中出现了分段错误。有些8
没有被分配到树的顶部。分段错误的确切位置是私有insert300
,它会测试element == root->element
。所以我不知道我缺少什么来解决这个问题。有人可以引导我走向正确的方向。
对root
的命名约定感到抱歉。当我完成所有功能后,我会将其更改为父级。如果传入的数据类型存在混淆。请查看我的头文件!
标题:
#ifndef _OLSOND5_H
#define _OLSOND5_H
typedef float Element300;
struct TreeNode300;
typedef TreeNode300 * TreePtr300;
struct TreeNode300
{
Element300 element;
TreePtr300 left;
TreePtr300 right;
};
class BST300
{
public:
BST300();
BST300(const BST300 &);
~BST300();
void insert300(const Element300);
void remove300( const Element300);
TreePtr300 search300(const Element300) const;
void preView300() const;
void inView300() const;
void postView300() const;
private:
TreePtr300 theTree;
void copy300(const TreePtr300);
void destroy300(TreePtr300 &);
void removeNode300(TreePtr300 &);
void findMaxNode300(TreePtr300 &, TreePtr300 &);
void insert300 (const Element300, TreePtr300 &);
void remove300(const Element300, TreePtr300 &);
TreePtr300 search300(const Element300, const TreePtr300) const;
void preView300(const TreePtr300) const;
void inView300( const TreePtr300) const;
void postView300(const TreePtr300) const;
};
#endif
复制构造函数(复制构造函数调用此函数):
void BST300::copy300(const TreePtr300 oldTree)
{
if(oldTree != NULL)
{
insert300(oldTree->element);
copy300(oldTree->left);
copy300(oldTree->right);
}
return;
}
私人insert300
功能:
void BST300::insert300(const Element300 element,TreePtr300 & root)
{
TreePtr300 newNode = new(std::nothrow) TreeNode300;
if(newNode == NULL)
{
cerr << "Error: Node was not created!" << endl;
}
else if(root == NULL)
{
newNode->element = element;
newNode->left = NULL;
newNode->right =NULL;
root = newNode;
}
else if(element == root->element)
{
cerr << "The number " << element << " is a duplicate. Not Added!" << endl;
}
else if(element < root->element)
{
insert300(element, root->left);
}
else
{
insert300(element, root->right);
}
return;
}
驱动程序:
#include <iostream>
#include "olsond5.h"
using namespace std;
int main()
{
BST300 myBinarySearch;
myBinarySearch.insert300(8.0);
myBinarySearch.insert300(4.0);
myBinarySearch.insert300(12.0);
myBinarySearch.insert300(2.0);
myBinarySearch.insert300(6.0);
myBinarySearch.insert300(10.0);
myBinarySearch.insert300(14.0);
BST300 myBinarySearch2(myBinarySearch);
cout << "INVIEW" << endl;
cout << "------------------------------------------------------" << endl;
myBinarySearch2.inView300();
return 0;
}