简单树插入节点功能调高Null

时间:2017-03-25 08:17:47

标签: c++ tree

我已经实现了这个Simple Tree,但是当我尝试在rootNode之后插入时,我一直得到NULL值。调试器显示我的mValue为NULL。谁能告诉我我做错了什么?看完后我似乎无法弄明白。

class Tree {
public:

    Tree()
    {
    mRootNode = NULL;
    }

    ~Tree()
    {
        if (mRootNode != NULL)
        {
            delete mRootNode;
        }
    }

    void PushValues(int value)
    {
        if (mRootNode == NULL)
        {
            mRootNode = new TreeNode(value);
        }
        else
        {
            mRootNode->PushNodeValues(value);
        }
    }

    void PrintValues()
    {
        if (mRootNode == NULL)
        {
            mRootNode->PrintNodeValues();
        }
    }



private:


    class TreeNode
    {
        TreeNode* mLeft;
        TreeNode* mRight;
        int mValue;
    public:

        TreeNode(int value)
        {

            std::cout << "you are inside the treenode constuctor" << std::endl;
            mValue = value;
            //mLeft = NULL; 
            //mRight = NULL;
        }
        ~TreeNode()
        {
            if (mLeft != NULL)
            {
                delete mLeft;
            }

            if (mRight != NULL)
            {
                delete mRight;
            }


        }
        void PushNodeValues(int value)
        {


            if (value < mValue)
            {
                if (mLeft = NULL)
                {
                    mLeft = new TreeNode(value);
                }

                else
                {
                    mLeft->PushNodeValues(value);
                }
            }

            else
            {
                if (mRight == NULL)
                {
                    mRight = new TreeNode(value);
                }
                else
                {
                    mRight->PushNodeValues(value);
                }
            }
        }

        void printnodeValue()
        {
            std::cout << "value is " << mValue << std::endl;
        }
        void PrintNodeValues()
        {
            if (mLeft != NULL)
            mLeft->PrintNodeValues();
             printf("%d, ", mValue);


            if (mRight != NULL)
            mRight->PrintNodeValues(); 
            printf("%d, ", mValue); 
        }

    };

    TreeNode* mRootNode;

};


int main()
{

    int data[] = {
        60, 36, 25, 44, 62, 58, 25, 66, 84, 48,
        1, 63, 6, 58, 40, 73, 30, 100, 88, 60,
        100, 73, 77, 55, 6, 33, 69, 4, 93, 33,
        36, 53, 79, 2, 35, 41, 64, 76, 70, 81,
        55, 22, 20, 44, 93, 58, 14, 6, 60, 36
    };


    Tree myTree;
    for (int i = 0; i < 50; i++)
    {

        myTree.PushValues(data[i]);
    }


    myTree.PrintValues(); 

    return 0;

}

1 个答案:

答案 0 :(得分:0)

您的树结构中存在一些错误,下面是一个示例代码,说明如何以递归方式保护树中的数据。

  

注意:这只是我修改的插入函数的基本结构   从给定的代码中为您服务。你仍然需要添加例外和东西。

TreeNode* PushValues(TreeNode*& node,int key)
{
    if (node == NULL)
    {
        TreeNode *newNode = new TreeNode(key);
        return newNode;
    }
    if (key < node->mValue)
        node->mLeft = PushValues(node->mLeft, key);
    else if (key > node->mValue)
        node->mRight = PushValues(node->mRight, key);
    return node;
}