《剑指offer》面试题8:二叉树的下一个节点

题目:给定一棵二叉树和其中的一个节点,给出中序遍历的该节点的下一个节点。树的节点不仅仅有左右孩子还有指向父节点的指针。

思路:1.判断该节点是否有右孩子,如果有:右孩子的最左的节点是该节点的下一个节点。

            如果没有右孩子:判断该节点的父节点的左孩子是否为该节点,否者一直向上直到父节点为空。

代码如下:

BinaryTree* GetNext(BinaryTree* pNode)
{
	if (pNode == nullptr)
	{
		return nullptr;
	}
	BinaryTree* pNext = nullptr;
	if (pNode->m_right != nullptr)
	{
		pNext = pNode->m_right;
		while (pNext->m_left != nullptr)
		{
			pNext = pNext->m_left;
		}
		return pNext;
	}
	else if(pNode ->m_right == nullptr)
	{
		BinaryTree* pcurrent = pNode;
		BinaryTree* pparent = pNode->m_parent;
		while (pparent != nullptr && pcurrent != pparent->m_left)
		{
			pcurrent = pparent;
			pparent = pparent->m_parent;
		}
		pNext = pparent;
	}
	return pNext;
}

点赞