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;
}
二级指针能不能这么用?如果可以,后面那个为什么不行?
如果不行,二级指针是用来做什么的 。
如果二级指针能这么用,该怎么理解?
一般说指针指向地址,可以理解为指向一个固定的内存单元吗,这个内存单元的地址也是固定的。只有这样假设我才能想明白第一个程序为什么有效果