1. 程式人生 > >二叉樹的下一個節點

二叉樹的下一個節點

劍指offer58題

解題思路

這個題需要考慮的點是

  1. 該節點存在右子樹,那麼下一個節點就是右子樹的最左節點
  2. 該節點不存在右子樹的話
    1. 該節點是父節點的左節點,那麼下一個節點是父節點
    2. 該節點是父節點的右節點,向上查詢到一個節點是其父節點的左節點,那麼這個節點的父節點就是下一個節點

程式碼

class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
    if(pNode == nullptr) return nullptr;
    TreeLinkNode* temp = nullptr;
    if(pNode->right)
    {
        temp =  pNode->right;
        while(temp->left) temp = temp->left;
    }
    else if(pNode->next)
    {
        TreeLinkNode* cur = pNode;
        TreeLinkNode* parent = pNode->next;
        while(parent != nullptr && parent->left != cur)
        {
            cur = cur->next;
            parent = parent->next;
        }
        temp = parent;
    }
    return temp;
}
};