二叉树结点的定义如下:
struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight; };解法如下:
//返回双向链表的头结点 BinaryTreeNode *Convert(BinaryTreeNode *pRoot) { //指向已经装换好的链表的最后一个结点 BinaryTreeNode *pLast=NULL; //转换排序二叉树为双向链表 ConvertNode(pRoot,&pLast); //返回头结点 BinaryTreeNode *pHeadOfList=pLast; while(pHeadOfList!=NULL&&pHeadOfList->m_pLeft!=NULL) { pHeadOfList=pHeadOfList->m_pLeft; } return pHeadOfList; } //采用中序遍历的方式将二叉树转化为双向链表, *pLastNodeInList指向双向链表的最后一个节点 void ConvertNode(BinaryTreeNode *pNode, BinaryTreeNode **pLastNodeInList) { if (pNode==NULL) return; BinaryTreeNode *pCurrent=pNode; //先转化左子树 if (pCurrent->m_pLeft!=NULL) ConvertNode(pCurrent->m_pLeft,pLastNodeInList); //将双向链表的最后一个节点与根节点连接在一起 pCurrent->m_pLeft=*pLastNodeInList; if(*pLastNodeInList!=NULL) (*pLastNodeInList)->m_pRight=pCurrent; *pLastNodeInList=pCurrent; //转换右子树 if (pCurrent->m_pRight!=NULL) ConvertNode(pCurrent->m_pRight,pLastNodeInList); }
原文地址:http://blog.csdn.net/lsh_2013/article/details/45989975