把二元查找树转变成排序的双向链表
2012-08-27 16:20
405 查看
#include <iostream.h> struct BSTreeNode { int m_nValue; struct BSTreeNode *m_pLeft; struct BSTreeNode *m_pRight; }; void addBSTreeNode(BSTreeNode *&pCurrent,int value); //建立二叉排序树 void inOrderBSTree(BSTreeNode *pBSTree); //中序遍历 void convertToDoubleList(BSTreeNode *pCurrent);//转换成双链表 BSTreeNode *pHead=NULL;//指向双链表的头结点 BSTreeNode *pIndex=NULL;//指向前一个结点 int main() { BSTreeNode *pRoot=NULL; addBSTreeNode(pRoot,10); addBSTreeNode(pRoot,6); addBSTreeNode(pRoot,14); addBSTreeNode(pRoot,4); addBSTreeNode(pRoot,8); addBSTreeNode(pRoot,12); addBSTreeNode(pRoot,16); inOrderBSTree(pRoot); return 0; } void addBSTreeNode(BSTreeNode *&pCurrent,int value) { if(pCurrent==NULL) { BSTreeNode *pBSTree=new BSTreeNode; pBSTree->m_nValue=value; pBSTree->m_pLeft=NULL; pBSTree->m_pRight=NULL; pCurrent=pBSTree; } else if (pCurrent->m_nValue<value) { addBSTreeNode(pCurrent->m_pRight,value); } else if (pCurrent->m_nValue>value) { addBSTreeNode(pCurrent->m_pLeft,value); } else { cout<<"node repeated"<<endl; } } void inOrderBSTree(BSTreeNode *pBSTree) { if (NULL==pBSTree) { return; } if (NULL!=pBSTree->m_pLeft) { inOrderBSTree(pBSTree->m_pLeft); } convertToDoubleList(pBSTree); if (NULL!=pBSTree->m_pRight) { inOrderBSTree(pBSTree->m_pRight); } } void convertToDoubleList(BSTreeNode *pCurrent) { pCurrent->m_pLeft=pIndex; if (NULL==pIndex) { pHead=pIndex; } else { pIndex->m_pRight=pCurrent; } pIndex=pCurrent; cout<<pCurrent->m_nValue<<" "; }
相关文章推荐
- Java实现: 把二元查找树转变成排序的双向链表(树)
- 把二元查找树转变成排序的双向链表(树)
- 把二元查找树转变成排序的双向链表
- 1.把二元查找树转变成排序的双向链表
- 1.把二元查找树转变成排序的双向链表(树)
- 微软面试100题 第一题 把二元查找树转变成排序的双向链表
- 1.把二元查找树转变成排序的双向链表(树)
- 数据结构 - 把二元查找树转变成排序的双向链表(C++)
- 【编程题目】把二元查找树转变成排序的双向链表(树)
- 把二元查找树转变成排序的双向链表(树)
- 微软面试100之1 把二元查找树转变成排序的双向链表(树)
- 关于把二元查找树转变成排序的双向链表(树)的C语言设计程序执行后出现段错误的问题
- 《程序员面试题精选》01.二元查找树转变成排序的双向链表
- 剑指offer系列-T27把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表(树)
- 把二元查找树转变成排序的双向链表(微软面试题)
- 把二元查找树转变成排序的双向链表(微软面试)
- 二元查找树转变成排序的双向链表(树)
- 把二元查找树转变成排序的双向链表
- 【微软100题】001把二元查找树转变成排序的双向链表(树)