题目描述:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。 注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
因为是中序遍历,所有要找的这个父结点,肯定有这样的特征:
当前结点所在的子树一定是某个根结点的左子树。并且当前结点是该左子树的最右结点。
所以算法设计:
如果当前结点有右子树,那么找右子树的最左结点。 如果当前结点没有右子树,那么找一个合适的父结点。
所以代码实现:
TreeLinkNode* GetNext(TreeLinkNode* pNode) { TreeLinkNode *cur = pNode; if(cur->right != NULL) { cur = cur->right; while(cur->left != NULL) { cur = cur->left; } }//if else { TreeLinkNode *tmp = cur->next; if(tmp == NULL) return NULL; while(tmp != NULL && tmp->left != cur) { cur = tmp; tmp = tmp->next; } cur = tmp; } return cur; }