/* struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) { } }; */ #include <cstddef> #include <sys/types.h> #include <vector> class Solution { public: vector<TreeLinkNode*> nodes; TreeLinkNode* GetNext(TreeLinkNode* pNode) { TreeLinkNode* root = pNode; if(root == nullptr) return nullptr; // 找根节点 因为next指针指向父节点 while(root->next != nullptr) { root = root->next; } // 中序遍历 InOrder(root); for(int i = 0; i < nodes.size(); i ++) { if(nodes[i] == pNode) return nodes[i + 1]; } return nullptr; } void InOrder(TreeLinkNode* root) { if(root == nullptr) return; InOrder(root->left); nodes.push_back(root); InOrder(root->right); } };