1. 程式人生 > >劍指offer 面試題8:二叉樹的下一個節點 c++

劍指offer 面試題8:二叉樹的下一個節點 c++

題目:給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。

解析:三種情況:1.若節點有右子樹,中序下一個就是 右子樹最左孩子節點  2.若無右子樹,且當前節點是父節點的左子節點,下一個就是父節點   3.無右子樹,且當前節點是父節點的右子節點,那下一個就是 父節點的父節點,一直往上找, 一直找到根,說明當時節點是樹的最右節點,中序 遍歷無下一個節點。寫法上第2中和第3中可以合併一起寫

class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode)
    {
        if(pNode == nullptr) return nullptr;
        TreeLinkNode *ret=nullptr;
        if(pNode->right!=nullptr)
        {
            TreeLinkNode *pcur = pNode->right;
            while(pcur && pcur->left)
            {
                pcur=pcur->left;
            } ret = pcur;
        }else if(pNode->next)  //右子樹為空 且父節點不空
        {
            TreeLinkNode *pcur=pNode,*parent=pNode->next;
            while(parent && parent->right == pcur) //父節點不空
            {
                pcur = parent;
                parent = parent->next;
            }
            ret = parent;
        }return ret;
    }
};

https://www.nowcoder.com/profile/9695725/codeBookDetail?submissionId=37384915