二叉树 简单实现 问题解决

耽搁了好长时间,今天终于把问题解决了。

之前没有完成 查找父结点的功能 在同学帮助下找到了原因。

首先,是两个我的错误想法,应该是

1.树的一个结点的值为NULL,表示这个节点不存在,或者是一个空节点,没有左、右子树,没有数据,什么都没有

2.两个结点相等,必须是数据、左右子树都一样才可以,只有数据相等是不可以的

之前已经说了,总是找不到父结点,是因为我比较的一直是两个结点是否相等,而不是两个结点的数据相等,这样当然找不到了

这次修改就是把原来的比较结点换成了比较节点的数据,加了一层if来控制一种特殊情况:如果某个结点的左子结点为空,却去让它的左子结点的数据赋给某个变量

原来的代码就不贴了,贴一下更改的寻找父结点的函数:

BinTreeNode* BinTree::Father(BinTreeNode *t, BinTreeNode *p) {   //寻找父结点,t为根节点,p为要寻找结点
	BinTreeNode *q;
	if (t == NULL || p == NULL)return NULL;
	//若t为p的父结点,则返回t
	if (t->GetLeft() != NULL)                    //判断特殊情况<span style="display: none; width: 0px; height: 0px;" id="transmark"></span>
		if ((t->GetLeft())->GetData() == p->GetData())
			return t;
	if (t->GetRight() != NULL)
		if ((t->GetRight())->GetData() == p->GetData())
			return t;
	//否则分别在t的左右子树寻找
	if ((q = Father(t->GetLeft(), p)) != NULL) return q;
	else return Father(t->GetRight(), p);
}
好的,就是这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值