class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if(pNode==NULL)
return NULL;
{
TreeLinkNode*pRight=pNode->right;
while(pRight->left!=NULL)
pRight=pRight->left;
return pRight;
{
TreeLinkNode*current=pNode;
TreeLinkNode*parent=pNode->next;
while(parent!=NULL&¤t==parent->right)
{
current=parent;
parent=parent->next;
}
return parent;
}
}
return next;
}
};
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if(pNode==NULL)
return NULL;
TreeLinkNode* next=NULL;
//1.判断该节点的右节点是否为空,若不为空,则下一个节点为该节点一直遍历下去的最左节点
if(pNode->right!=NULL){
TreeLinkNode*pRight=pNode->right;
while(pRight->left!=NULL)
pRight=pRight->left;
return pRight;
}
//2.该节点的右节点为空,则分两种情况
else if(pNode->next!=NULL){
//2.1若该节点为父节点的左子节点,那么下一个节点就是其父节点
if(pNode->next->left==pNode)return pNode->next;
//2.2 若该节点为父节点的右子节点,那么一直往父节点上面走,直到父节点为空,或者该节点是父节点的左节点(非右)
else{
TreeLinkNode*current=pNode;
TreeLinkNode*parent=pNode->next;
while(parent!=NULL&¤t==parent->right)
{
current=parent;
parent=parent->next;
}
return parent;
}
}
return next;
}
};