將搜尋二叉樹轉化為雙向連結串列
阿新 • • 發佈:2019-02-11
用二叉樹的_pLeft表示_prev,用二叉樹的_pRight表示_next。
用中序遍歷的方式遍歷整棵二叉樹。
Node* BothwayList()
{
if(!_pRoot)
return NULL;
stack<Node*> s;
s.push(_pRoot);
Node* pCur = NULL;
Node* pPre = _GetLeftNode();
Node* pHead = pPre;
size_t flag = 0 ;
while(!s.empty())
{
pCur = s.top();
while(pCur->_pLeft)
{
s.push(pCur->_pLeft);
pCur = s.top();
}
if(flag == 0)
flag = 1;
else
{
pPre-> _pRight = pCur;
pCur->_pLeft = pPre;
pPre = pCur;
}
s.pop();
while(!pCur->_pRight && !s.empty())
{
pCur = s.top();
pPre->_pRight = pCur;
pCur->_pLeft = pPre;
pPre = pCur;
s.pop();
}
if(pCur->_pRight)
s.push(pCur->_pRight);
}
return pHead;
}
因為第一個最左結點pPre = pCur,所以不需要修改_pLeft和_pRight的值,所以用flag記錄第一次的最左結點。