/*
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==NULL){
return NULL;
}
//如果右子树不为空,则找右子树的最左节点
if(pNode->right!=NULL){
pNode=pNode->right;
while(pNode->left!=NULL){
pNode=pNode->left;
}
return pNode;
}
//否则如果没有右子树,则向上寻找当前节点的第一个父节点为下一个中序遍历节点
while(pNode->next!=NULL){
//如果当前节点为左子节点,则直接返回当前节点的父节点
if(pNode->next->left==pNode){
return pNode->next;
}
//如果当前节点为右子节点,则向上重复之前的判断
pNode=pNode->next;
}
//如果当前节点即为二叉树最后一个节点
return NULL;
}
};