面试题58:给定一颗二叉树和其中一个节点,如何找出中序遍历顺序的下一个节点?树中的节点除了有两个分别指向左右子节点的指针以外,还有一个指向父节点的指针
//取二叉树的下一个节点
BinaryTreeNode* getNext(BinaryTreeNode* pNode){
if(pNode==NULL)return NULL;
if(pNode->m_pRight){
BinaryTreeNode* pRightNode=pNode->m_pRight;
while(pRightNode->m_pLeft)
pRightNode=pRightNode->m_pLeft;
return pRightNode;
}
BinaryTreeNode* pParent = pNode->m_pParent;
BinaryTreeNode* pCurrent = pNode;
while(pParent){
if(pParent->m_pLeft==pCurrent)
break;
pCurrent=pParent;
pParent=pCurrent->m_pParent;
}
return pParent;
}
参考:《剑指offer》何海涛著