采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
void
removeMin1(){
assert
(root != NULL);
Node* node = root;
while
(node->left != NULL){
node = node->left;
}
node = node->right;
你的这个写法,在while循环以后,node找到了二叉树中的最小元素所存储的node。之后,你的语句node = node->right,只是将在这个函数里声明的node指针变量指向了你找到的这个最小元素的右节点,而整个二叉树没有发生改变。
要想改变整个二叉树,你需要找到这个最小元素的父节点,让这个最小元素的父节点的左孩子,指向这个最小元素的右孩子。再想想看:)
加油!
知道了,node是一个指针,改变它的指向没有意义,但是我对node进行的操作怎样才能对root产生影响呢?
我的意思是node中最小元素父节点的左孩子指向最小元素右节点后,root就已经改变了吗?
node是一个在这个函数中临时开辟的指针,改变它本身的指向,当这个函数结束的时候,这个指针也被销毁了,这个改变不会保留。但是当这个指针指向二叉树的一个节点的时候,改变这个指针指向节点的具体内容是有意义的。所以通过这个指针,无论是改变node->key,node->value,node->left还是node->right,都对node指向的节点内容进行了真实的改变。可以试试看:)
登录后可查看更多问答,登录/注册
课程专为:短时间内应对面试、升职测评等艰巨任务打造
9.0k 21
5.9k 3
5.2k 5
1.5k 18
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号