/* 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); } };