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

二叉树的下一个结点

时间:2015-08-27 09:32:53      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。
注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

  因为是中序遍历,所有要找的这个父结点,肯定有这样的特征:

当前结点所在的子树一定是某个根结点的左子树。并且当前结点是该左子树的最右结点。

  所以算法设计:

如果当前结点有右子树,那么找右子树的最左结点。
如果当前结点没有右子树,那么找一个合适的父结点。

  所以代码实现:

TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
	TreeLinkNode *cur = pNode;
	if(cur->right != NULL)
	{
		cur = cur->right;
		while(cur->left != NULL)
		{
			cur = cur->left;
		}
	}//if
	else
	{
		TreeLinkNode *tmp = cur->next;
		if(tmp == NULL)
			return NULL;
		while(tmp != NULL && tmp->left != cur)
		{
			cur = tmp;
			tmp = tmp->next;
		}
		cur = tmp;
	}
	return cur;
}

  

二叉树的下一个结点

标签:

原文地址:http://www.cnblogs.com/stemon/p/4762292.html

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