您的位置:首页 > 其它

1.把二元查找树转变成排序的双向链表

2011-10-04 13:47 471 查看
参照了别人的代码,自己写一遍,好好理解下

View Code

#include <iostream>
using namespace std;

struct BSTreeNode
{
BSTreeNode *m_pLeft;
BSTreeNode *m_pRight;
int m_Value;
};

BSTreeNode *phead;
BSTreeNode *pnext;

void converttoDoubleList(BSTreeNode *pCurrent)     //结点链表化
{
pCurrent->m_pLeft = pnext;
if(NULL==pnext)
{
phead=pCurrent;
}
else
{
pnext->m_pRight = pCurrent;
}
pnext = pCurrent;
cout<<pCurrent->m_Value<<endl;
}

//加入结点,建立二元查找树
void AddNodeToTree(BSTreeNode * &pCurrent,int value)
{
if(NULL==pCurrent)
{
BSTreeNode *pTree = new BSTreeNode();
pTree->m_pLeft = NULL;
pTree->m_pRight = NULL;
pTree->m_Value = value;
pCurrent = pTree;
}
else if(pCurrent->m_Value > value )
{
AddNodeToTree(pCurrent->m_pLeft,value);
}
else if(pCurrent->m_Value < value )
{
AddNodeToTree(pCurrent->m_pRight,value);
}
}

//中序遍历二元查找树
void InOrderTraverse(BSTreeNode *pCurrent)
{
if(NULL==pCurrent)
{
return ;
}
if(NULL!=pCurrent->m_pLeft)
{
InOrderTraverse(pCurrent->m_pLeft);
}

converttoDoubleList(pCurrent);       //左子树遍历完后,对该指针链表化

if(NULL!=pCurrent->m_pRight)
{
InOrderTraverse(pCurrent->m_pRight);
}
}

int main()
{
BSTreeNode *pstart = NULL;
phead = pnext = NULL;

AddNodeToTree(pstart,10);
AddNodeToTree(pstart,16);
AddNodeToTree(pstart,14);
AddNodeToTree(pstart,12);
AddNodeToTree(pstart,4);
AddNodeToTree(pstart,8);
AddNodeToTree(pstart,6);

InOrderTraverse(pstart);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: