二叉树 简单实现 问题解决

原创 2015年11月21日 15:52:00

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

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

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

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

相关文章推荐

递归问题解决二叉树问题

二叉树是一种常见的数据结构,其是一种每个结点最多有两个子树的有序树。二叉树常被用于实现二叉查找树和二叉堆。二叉树节点定义如下: struct BinaryTreeNode { int m_nVa...

Windows7下gsoap实现Webservices的简单加法实例(详细步骤+调试问题解决)

步骤一: 步骤二:

二叉树的简单实现

  • 2016年04月13日 09:48
  • 2KB
  • 下载

二叉树的简单实现

  • 2013年12月09日 15:21
  • 5KB
  • 下载

poj2250(简单的二叉树问题) Tree Recovery

Tree Recovery Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9620   ...

二叉树的C++简单实现

  • 2013年12月09日 14:39
  • 4KB
  • 下载

三个二叉树的简单问题

本文给出三个二叉树的简单问题的答案,因其简单易懂,笔者就不多说了,直接上代码。 一.找出二叉树最大值的节点 //找出二叉树最大值的节点 class Solution { public: /**...
  • qwssd
  • qwssd
  • 2017年03月25日 16:23
  • 211

boj 1345 二叉树问题 简单的dp

http://acm.scs.bupt.cn/onlinejudge/showproblem.php?problem_id=1345 1.从底向上复杂度比较低。2.简单的dp应该熟悉。 TravelS...

java简单实现二叉树

  • 2010年10月05日 10:04
  • 1KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树 简单实现 问题解决
举报原因:
原因补充:

(最多只允许输入30个字)