码迷,mamicode.com
首页 > 其他好文 > 详细

018给定二叉查找树的一个结点, 写一个算法查找它的“下一个”结点“(keep it up)

时间:2014-09-03 01:32:05      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:c++   数据结构   二叉树   

给定二叉查找树的一个结点, 写一个算法查找它的“下一个”结点(即中序遍历后它的后继结点), 
其中每个结点都有指向其父亲的链接。
这个题本质就是线索化二叉树时找后继结点的题。找后继结点存在两种情况:
1 如果当前结点有右孩子,则后继结点为右孩子的最左结点
2 如果没有右孩子,
     A 当前结点为父结点的左孩子,则父结点就是后继结点
B 当前结点为父结点的右孩子,则向父结点找,直到当前结点不是父结点的右孩子终止,此时

  父节点就是后继结点

代码:

struct TreeNode
{
	int data;
	TreeNode* leftChild;
	TreeNode* rightChild;
	TreeNode* parent;
};

TreeNode* findContinue(const TreeNode* vNode)
{
	if (vNode == NULL) return NULL;

	if (vNode->rightChild != NULL)
	{
		TreeNode* Tmp = vNode->rightChild;
		while (Tmp->leftChild != NULL)
		{
			Tmp = Tmp->leftChild;
		}
		return Tmp;
	}

	TreeNode* Cur     = vNode;
	TreeNode* pParent = Cur->parent;
	while (pParent != NULL && pParent->rightChild == Cur)
	{
		Cur     = pParent;
		pParent = pParent->rightChild;
	}
	return pParent;
}


018给定二叉查找树的一个结点, 写一个算法查找它的“下一个”结点“(keep it up)

标签:c++   数据结构   二叉树   

原文地址:http://blog.csdn.net/xiaoliangsky/article/details/39016805

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!