csdn4006600 2017-11-29 05:45 采纳率: 0%
浏览 997
已采纳

[新手程序员]Avl树旋转代码问题

bool BiNode::LR_Balance(BiNode** T)
{
BiNode* tempNode = (*T)->lchild->rchild;
BiNode* p = (*T)->lchild;
if (tempNode == NULL)
return false;
/* 处理tempNode的子树 /
(*T)->lchild->rchild = tempNode->lchild;
(*T)->lchild = tempNode->rchild;
/
将子树根节点和根节点的有节点连接掉tempNode */
tempNode->lchild = p;
tempNode->rchild = (*T);

(*T) = tempNode;//改变了T的父节点的孩子指针的指向,从指向T变成指向tempNode
return true;

}
(*T) = tempNode;

逐行运行时发现这一行代码使T的父节点指T的指针变成了指向tempNode当前节点。

然后我又写了下面的程序,结果并没有改变。
int main()
{
BiNode* BST1= new BiNode();
BiNode* BST2 = new BiNode();
BiNode* BST3 = new BiNode();
bool change(BiNode** T);

BST1->data = 59;
BST2->data = 33;
BST3->data = 13;
BST1->lchild = BST2;

change(&BST2);
BST1->PreOrderTraverse(BST);
cout << endl;

}
bool change(BiNode** T)
{
BiNode* BST3 = new BiNode();
BST3->data = 13;
(*T) = BST3;
return true;
}
二级指针能不能这么用?如果可以,后面那个为什么不行?
如果不行,二级指针是用来做什么的 。

如果二级指针能这么用,该怎么理解?
一般说指针指向地址,可以理解为指向一个固定的内存单元吗,这个内存单元的地址也是固定的。只有这样假设我才能想明白第一个程序为什么有效果

  • 写回答

1条回答 默认 最新

  • Debug_dodge 2017-11-29 05:50
    关注

    你在函数里new了一个结构体,还不是静态的,函数调用完它就“消失”(实际上是程序不会将这个变量的值保持住,可能又变成别的值)了

    你应该了解一下函数调用的过程

    局部变量是保存在栈上的,函数调用返回时会移动栈指针,然后这片区域可能随后又保存了别的东西,原来的数据是不会保存下来的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    悬赏问题

    • ¥15 PCL注册的选点等函数如何取消注册
    • ¥15 问一下各位,为什么我用蓝牙直接发送模拟输入的数据,接收端显示乱码呢,米思齐软件上usb串口显示正常的字符串呢?
    • ¥15 Python爬虫程序
    • ¥15 crypto 这种的应该怎么找flag?
    • ¥15 代码已写好,求帮我指出错误,有偿!
    • ¥15 matlab+波形匹配算法
    • ¥15 转录组分析做聚类树图时癌旁组被分到了癌组
    • ¥15 大一Python字典
    • ¥15 multisim电路设计(相关搜索:设计报告)
    • ¥15 PC-lint Plus