#include <iostream> using namespace std; struct TreeNode { int m_nValue; TreeNode *m_pLeft; TreeNode *m_pRight; TreeNode(int _nNum, TreeNode *t1, TreeNode *t2) : m_nValue(_nNum), m_pLeft(t1), m_pRight(t2){} }; void ConvertTreeToDList(TreeNode *pNode, TreeNode * &pHead, TreeNode * &pTail) { if (!pNode) { pHead = NULL; pTail = NULL; return; } TreeNode *pLHead = NULL; TreeNode *pLTail = NULL; TreeNode *pRHead = NULL; TreeNode *pRTail = NULL; TreeNode *pCur = pNode; pHead = pCur; pTail = pCur; if (pNode->m_pLeft) { ConvertTreeToDList(pNode->m_pLeft, pLHead, pLTail); } if (pNode->m_pRight) { ConvertTreeToDList(pNode->m_pRight, pRHead, pRTail); } pCur->m_pLeft = pLTail; if (pLTail) { pLTail->m_pRight = pCur; } pCur->m_pRight = pRHead; if (pRHead) { pRHead->m_pLeft = pCur; } if (pLHead) { pHead = pLHead; } if (pRTail) { pTail = pRTail; } } void PrintDListTo(TreeNode *pHead) { while (pHead) { cout << pHead->m_nValue << ' '; pHead = pHead->m_pRight; } cout << endl; } void PrintDListFrom(TreeNode *pTail) { while (pTail) { cout << pTail->m_nValue << ' '; pTail = pTail->m_pLeft; } cout << endl; } int main() { TreeNode *t2 = new TreeNode(2, 0, 0); TreeNode *t7 = new TreeNode(7, 0, 0); TreeNode *t4 = new TreeNode(4, t2, t7); TreeNode *t9 = new TreeNode(9, 0, 0); TreeNode *t12 = new TreeNode(12, 0, 0); TreeNode *t10 = new TreeNode(10, t9, t12); TreeNode *t8 = new TreeNode(8, t4, t10); TreeNode *head, *tail; ConvertTreeToDList(t8, head, tail); PrintDListTo(head); PrintDListFrom(tail); return 0; }