二叉树的下一个结点
二叉树的下一个结点
http://www.nowcoder.com/questionTerminal/9023a0c988684a53960365b889ceaf5e
中序遍历
左子结点 - 父节点 - 右子结点
先看有没有右子结点,右子节点有没有左子结点,
再看有没有比他大的父节点
就可以了
class Solution { public: TreeLinkNode* GetNext(TreeLinkNode* pNode) { if(pNode->right)//还有右子节点 { pNode = pNode->right;//移动到右子节点 while(pNode->left)//有左子节点,移动到左子节点 { pNode = pNode->left; } return pNode;//返回该节点 } else//没有右子节点,寻找最近一个比该节点大的祖先节点 { while(pNode->next) { if(pNode->val < pNode->next->val) { return pNode->next; } pNode = pNode->next; } } return NULL;//没有右子节点,没有比他大的祖先节点,则该点为最右叶子节点,没有下一个节点,返回NULL } };