- 有右子树,下一结点是右子树中的最左结点,例如 B,下一结点是 H
- 无右子树,且结点是该结点父结点的左子树,则下一结点是该结点的父结点,例如 H,下一结点是 E
- 无右子树,且结点是该结点父结点的右子树,则我们一直沿着父结点追朔,直到找到某个结点是其父结点的左子树,如果存在这样的结点,那么这个结点的父结点就是我们要找的下一结点。例如 I,下一结点是 A;例如 G,并没有符合情况的结点,所以 G 没有下一结点
时间:O(n)
空间:O(1)
TreeLinkNode* GetNext(TreeLinkNode* pNode){//有右子树,下一结点是右子树的最左结点if(pNode->right){pNode = pNode->right;while(pNode->left)pNode = pNode->left;return pNode;}else{//无右子树if(!(pNode->next))return NULL;//没有父结点,则没有下一结点else{//是父结点的左结点if(pNode == pNode->next->left){return pNode->next;}else{//是父结点的右结点while(pNode->next && pNode == pNode->next->right){pNode = pNode->next;}return pNode->next;}}}return NULL;}
