简单树插入节点函数显示为空

Simple Tree Insert Node Function turning up Null

本文关键字:显示 函数 节点 插入 简单      更新时间:2023-10-16

我已经实现了这个简单树,但是当我尝试在我的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;
}

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

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

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;
}