《剑指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;
}

点赞