【发布时间】:2015-10-13 13:40:07
【问题描述】:
我正在构建一个 AVL 树程序。我陷入了一个相当容易的情况,但很难理解哪里出了问题。我认为这是程序的错而不是我的原因是因为我在它之前有完全相同的类函数,“左”和“右”交换了,它工作得很好......
如您所见,该函数返回temproot 指针,如果root==temp 等于temp2。有趣的是,虽然当我在返回之前测试打印temproot 的值(在我的示例中为 15),但返回的实际值仍然是 20(temproot 的先前值) .我检查了一切。好像没有返回新获取的值……可能是什么问题?
更具体地说,确切的代码是这样的:
//structure
struct avlnode
{
int data;
avlnode * left;
avlnode * right;
}* root;
//class function
avlnode * Tree::RL_rotation (avlnode * temp)
{
avlnode * temproot = temp;
avlnode * temp1= new avlnode;
temp1=temp->right;
avlnode * temp2= new avlnode;
temp2=temp1->left;
temp1->left=temp2->right;
temp2->right=temp1;
temp->right=temp2;
temp->right=temp2->left;
temp2->left=temp;
if (root==temp)
{
root=temp2;
temproot=temp2;
}
cout << "temproot= " << temproot->data << endl;
return temproot;
}
【问题讨论】:
-
如果你说的是真的,那可能是缓冲区溢出(内存损坏)问题。
-
我不相信你。你是如何“检查”这些东西的?
temproot=temp2;真的会被执行吗? -
“不相关”的代码可能并不是那么不相关...
-
问题不在贴出的代码中。
-
您分配的新节点会立即泄漏。