/*
struct TreeLinkNode {
    int val;
    struct TreeLinkNode *left;
    struct TreeLinkNode *right;
    struct TreeLinkNode *next;
    TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
        
    }
};
中序遍历的第一个节点
if(有right) {
    右节点的最左面的值
} else {// 没有右节点
    if(curr是父节点的左节点) {
        return 父节点
    } else {
        return 根节点
    }
}
return nullptr;
画图+分类


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