我已经实现了这个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;
}
答案 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;
}