关闭

二叉树 简单实现 问题解决

标签: 二叉树代码
258人阅读 评论(0) 收藏 举报
分类:

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

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

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

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);
}
好的,就是这样。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:62842次
    • 积分:1709
    • 等级:
    • 排名:千里之外
    • 原创:108篇
    • 转载:26篇
    • 译文:1篇
    • 评论:8条
    文章分类
    最新评论