1 #include <iostream.h> 2 3 struct BSTreeNode 4 { 5 int m_nValue; 6 struct BSTreeNode *m_pLeft; 7 struct BSTreeNode *m_pRight; 8 }; 9 10 void addBSTreeNode(BSTreeNode *&pCurrent,int value); //建立二叉排序树 11 void inOrderBSTree(BSTreeNode *pBSTree); //中序遍历 12 void convertToDoubleList(BSTreeNode *pCurrent);//转换成双链表 13 14 BSTreeNode *pHead=NULL;//指向双链表的头结点 15 BSTreeNode *pIndex=NULL;//指向前一个结点 16 17 int main() 18 { 19 BSTreeNode *pRoot=NULL; 20 addBSTreeNode(pRoot,10); 21 addBSTreeNode(pRoot,6); 22 addBSTreeNode(pRoot,14); 23 addBSTreeNode(pRoot,4); 24 addBSTreeNode(pRoot,8); 25 addBSTreeNode(pRoot,12); 26 addBSTreeNode(pRoot,16); 27 28 inOrderBSTree(pRoot); 29 return 0; 30 } 31 32 33 void addBSTreeNode(BSTreeNode *&pCurrent,int value) 34 { 35 if(pCurrent==NULL) 36 { 37 BSTreeNode *pBSTree=new BSTreeNode; 38 pBSTree->m_nValue=value; 39 pBSTree->m_pLeft=NULL; 40 pBSTree->m_pRight=NULL; 41 pCurrent=pBSTree; 42 } 43 else if (pCurrent->m_nValue<value) 44 { 45 addBSTreeNode(pCurrent->m_pRight,value); 46 } 47 else if (pCurrent->m_nValue>value) 48 { 49 addBSTreeNode(pCurrent->m_pLeft,value); 50 } 51 else 52 { 53 cout<<"node repeated"<<endl; 54 } 55 } 56 57 void inOrderBSTree(BSTreeNode *pBSTree) 58 { 59 if (NULL==pBSTree) 60 { 61 return; 62 } 63 64 if (NULL!=pBSTree->m_pLeft) 65 { 66 inOrderBSTree(pBSTree->m_pLeft); 67 } 68 69 convertToDoubleList(pBSTree); 70 71 if (NULL!=pBSTree->m_pRight) 72 { 73 inOrderBSTree(pBSTree->m_pRight); 74 } 75 } 76 77 78 void convertToDoubleList(BSTreeNode *pCurrent) 79 { 80 pCurrent->m_pLeft=pIndex; 81 82 if (NULL==pIndex) 83 { 84 pHead=pIndex; 85 } 86 87 else 88 { 89 pIndex->m_pRight=pCurrent; 90 } 91 92 pIndex=pCurrent; 93 94 cout<<pCurrent->m_nValue<<" "; 95 }