/*
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) return NULL;
        TreeLinkNode* root = pNode;
        while(root->next){
            root = root->next;
        }
        vector<TreeLinkNode*> list;
        leftTraverse(root, list);
        for(int i = 0; i < list.size() ; i++){
           if(list[i] == pNode && i != list.size() -1)
               return list[i+1];
        }
        return NULL;
    }
    void leftTraverse(TreeLinkNode* root, vector<TreeLinkNode*> &list){
        if(!root) return;
        leftTraverse(root->left, list);
        list.push_back(root);
        leftTraverse(root->right, list);
    }
};