/*
struct TreeLinkNode {
    int val;
    struct TreeLinkNode *left;
    struct TreeLinkNode *right;
    struct TreeLinkNode *next;
    TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
        
    }
};
*/
class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode) {
    
      if(pNode->right)
      {
        TreeLinkNode* right=pNode->right;
        while(right->left)
        {
            right=right->left;
        }
        return right;
      }
      else {
        //没有右支点
        if(pNode->next&&pNode->next->left==pNode)
        {
            return pNode->next;
        }
        else if(pNode->next&&pNode->next->right==pNode)
        {

            while(pNode->next->next)
            {
                pNode=pNode->next;
            }
            TreeLinkNode* root=pNode->next;
            if(pNode==root->left)
            {
                return root;
            }
            else{
                return nullptr;
            }
        }
        else{
            return nullptr;
        }
        
      }
    }
};