csdn4006600 2017-11-29 05:45 采纳率: 100%
浏览 996
已采纳

[新手程序员]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条回答

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥15 和您碰到了同一个问题
      • ¥15 如何在微信支付V3PHP版请求中添加header?
      • ¥15 在数字信号处理中用MATLAB显示波形。
      • ¥15 keil MDK软件进行仿真调试的局限
      • ¥15 关于gateway产生临时文件夹的问题
      • ¥15 Java Broken Pipe以及OOM
      • ¥20 请问有没有RTL8211FS的参考原理图
      • ¥50 esp32的platfromio工程添加文件就会编译失败
      • ¥15 linux下运行VASP报错
      • ¥15 python里面查找赋值,如何可以在剩余未空值的行里面进行进一步的筛选呢?