本题源自剑指offer
------------------------------------------------------------------------------------------------------
中序遍历的下一个节点有三种情况
1 当这个节点右子树不为空,则下一个节点为右子树的最左子节点
2 若右子树为空,且节点为父节点的左子树,则下一个节点为父节点
3 若右子树为空,且节点为父节点的右子树,则按父指针向上遍历,直到遇到节点为父指针的左孩子。
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
TreeLinkNode* pNext=NULL;
if(pNode==NULL)
return NULL;
if(pNode->right!=NULL){
TreeLinkNode* pRight=pNode->right;
while(pRight->left!=NULL)
pRight=pRight->left;
pNext=pRight;
}else{
TreeLinkNode* pParent=pNode->parent;
TreeLinkNode* pCurrent=pNode;
while(pParent!=NULL&&pCurrent==pParent->right){
pCurrent=pParent;
pParent=pParent->parent;
}
pNext=pParent;
}
return pNext;
}