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 如果要满足要求就考虑所有情况然后判断,不同情况找不同节点即可