复制构造函数与二叉树的问题

时间:2015-11-06 23:52:58

标签: c++ binary-search-tree

我的二进制搜索树(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;
}

0 个答案:

没有答案