荣誉版主
- 积分
- -2403
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2010-5-4
- 最后登录
- 1970-1-1
|
下面是我的函数版,不要额外空间但是时间复杂度更大,类似于STL里对二叉树的iterator方法:
- struct NODE
- {
- int nVal;
- NODE* pLft;
- NODE* pRgt;
- NODE(int n) : nVal(n), pLft(NULL), pRgt(NULL)
- {}
- };
- void _inner_get_next(NODE* pNode, NODE* pIter, bool& bFlag, NODE*& pNext)
- {
- if (NULL == pNode) return;
- _inner_get_next(pNode->pLft, pIter, bFlag, pNext);
- if (NULL != pNext) return;
- if (bFlag && NULL == pNode->pLft && NULL == pNode->pRgt)
- {
- pNext = pNode;
- return;
- }
- if (pIter == pNode) bFlag = true;
- _inner_get_next(pNode->pRgt, pIter, bFlag, pNext);
- }
- NODE* GetNext(NODE* pRoot, NODE* pIter)
- {
- if (NULL == pRoot || NULL == pIter)
- return NULL;
- NODE* pNext = NULL;
- bool bFlag = false;
- _inner_get_next(pRoot, pIter, bFlag, pNext);
- return pNext;
- }
复制代码 |
|