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