/*

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:

    vector<TreeLinkNode *> list;

    TreeLinkNode* GetNext(TreeLinkNode* pNode) {

        //首先先找到二叉树的最终根节点

        TreeLinkNode *TreeSaveNode=pNode;

        while(pNode->next!=NULL){

            pNode=pNode->next;

        }

        mid(pNode);

        int i;

        for(i=0;i<=list.size()-1;i+=1){

            if(list[i]==TreeSaveNode){

                break;

            }

        }

        if(i==list.size()-1){

            return NULL;

        }

        return list[i+1];

    }

    void mid(TreeLinkNode * TreeNode){

        if(TreeNode->left!=NULL){

            mid(TreeNode->left);

        }

        if(TreeNode!=NULL){

            list.push_back(TreeNode);

        }

        if(TreeNode->right!=NULL){

            mid(TreeNode->right);

        }

    }

};