题目:给定一棵二叉树和其中的一个节点,给出中序遍历的该节点的下一个节点。树的节点不仅仅有左右孩子还有指向父节点的指针。
思路: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;
}