タイトル説明
前記ノードの指定されたバイナリツリーは、先行順走査順序とリターンの次のノードを見つけます。ツリー内のノードは、左と右の子ノードではないだけを含むことに注意してください、親ノードは、を指すポインタが含まれています。
思考
まず、ノードが右の子ノードを持っていないかどうかを決定し、もしあれば、NULLになるまで、その後、左の子ノードに戻り、左の子と右の子ノードをトラバースされた
ノードが右の子ノードをされていない場合は、Aまで、その後、層、ノードは親が親ノードが返された場合、子ノードを残し、そうでない場合は、その後、親ノードが存在しないまで継続し、このノードが最後のノードであることを示す、またはNULLでないかどうかを判断します
コード
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if(pNode == NULL)
return NULL;
if(pNode->right != NULL)
{
TreeLinkNode* tmp = pNode->right;
while(tmp->left != NULL)
tmp = tmp->left;
return tmp;
}
while(pNode->next != NULL)
{
TreeLinkNode* tmp = pNode->next;
if(tmp->left == pNode)
return tmp;
pNode = tmp;
}
return NULL;
}
};