【c++】指针自动改变的问题(已解决)

写了一年多的C ++了,今天写二叉搜索树ADT中的deletemin()的时候出现了一个非常奇怪,从未见过的问题---指针在赋值给其他指针变量一次之后,自己自动的改变了,简直是吓死我了

排查这个问题用了一个多小时,通过调试和输出过程量,最后确定了就是在这个deletemin()函数中许多指针在赋值之后都会自动跳变,完全失去了控制:

Node* BST :: deletemin(Node*& r){
	if(r == NULL){
		return NULL;
	}
	if(r->lc == NULL){
		if(r->rc != NULL){
			if(r->father != NULL){
				r->rc->father = r->father;
				r->father->lc = r->rc;
				return r;
			}
			else{
				cout << "赋值前:r->rc = " << r->rc << endl; 
				cout << "赋值前:root = " << root << endl;
				this->root = r->rc;
				cout << "r->rc = " << r->rc << endl;
				cout << "root = " << root << endl;
				cout << "r->rc->father" << r->rc->father << endl;
				cout << "root->father" << r->father << endl; 
				root->father = NULL;
				return r;
			}	 
		} 
		else{
			Node* temp = r;
			r = NULL;
			return temp; 
		}
	}
	return deletemin(r->lc); 
}

这个二分搜索树我使用了一个父指针便于向上搜索和方便写除去函数,但是deletemin这个函数还没搞定,写不了除去函数

出现跳变的证据:

从图中可以看到,每次赋值结束,R-> RC的值就会自动移动,简直像见了鬼一样

目前还没有解决,,,,,,

//2018/11/16问题完美解决(凌晨),原因是传入的是指针的引用,所以当传入参数树的根节点的时候,若有r == root 成立,本质是同一个指针的不同名字,上面的root = r->rc就是root = root->rc 也就是 r = r->rc 也等效于 r = root->rc

//2018/11/16带有父指针的二分搜索树完美运行,实现了13个常用ADT,代码先不发,等验收过了再发,否则被抄了就0分了

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值