思路1:先找根节点,再中序遍历存下节点,再找出下一个节点即可。
/*
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==nullptr) return nullptr;
TreeLinkNode * t = pNode;
while(t->next!=nullptr)
{
t=t->next;
}
TreeLinkNode * root = t;
vector<TreeLinkNode*> res;
dfs(root,res);
for(int i=0;i<res.size();i++)
{
if(res[i]==pNode)
return res[i+1];
}
return nullptr;
}
void dfs(TreeLinkNode * root,vector<TreeLinkNode*> &res)
{
if(root==nullptr)
return;
dfs(root->left,res);
res.push_back(root);
dfs(root->right,res);
}
};