タイトル説明は
、バイナリツリーとなっているノード、先行順走査順とリターンの次のノードを見つけることを考えます。ツリー内のノードは、左と右の子ノードではないだけを含むことに注意してください、親ノードは、を指すポインタが含まれています。
ソリューション:行きがけは、左右
2つのケース:
①pNode右のサブツリーが空である、それはノードの左の子ノードを検索し、現在のノードが同じノード、ノードすなわちになるまでバックアップPNODEは、次のノードのために
空にされていない右のサブツリー②pNodeで、右ノードPNODEに左のリーフノードを見つけるために下にトラバース
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if (pNode == NULL || (pNode->left==NULL && pNode->right==NULL && pNode->next==NULL))
return NULL;
if (pNode->right == NULL)
{
while (pNode->next && pNode->next->left != pNode)
pNode = pNode->next;
return pNode->next;
}
else if (pNode->right)
{
pNode = pNode->right;
while (pNode->left)
pNode = pNode->left;
return pNode;
}
}
};