class Solution {
public:
int flag = 0;
struct TreeLinkNode* res; //返回值
struct TreeLinkNode* son; //记录给出的子树根节点
void bianli(TreeLinkNode* p){ //中序遍历
if(p->left != NULL) bianli(p->left);
if(flag == 1) { //flag==1 说明这个节点就是要输出的节点
res = p; //记录
flag = 0; //置flag为0 防止下一个节点更新掉当前节点
}
if(p == son) flag = 1; //如果当前节点是给出的节点,则表明下一个节点要输出,flag置1
if(p->right != NULL) bianli(p->right);
return ;
}
TreeLinkNode* GetNext(TreeLinkNode* pNode) {
son = pNode;
struct TreeLinkNode* root = pNode;
while(root->next != NULL) root = root->next; //root用来找到根节点
bianli(root);
return res;
}
};
//递归方法时空复杂度都是On 如果要满足要求就考虑所有情况然后判断,不同情况找不同节点即可