1. 程式人生 > >將搜尋二叉樹轉化為雙向連結串列

將搜尋二叉樹轉化為雙向連結串列

用二叉樹的_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記錄第一次的最左結點。