您的位置:首页 > 编程语言 > C语言/C++

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

2014-08-25 23:04 288 查看
#include

using namespace std;
//创建树结构
typedef struct node
{
int data;
struct node *ltree,*rtree;
}*BitTree,bitTree;
//创建树函数
void creat_tree(BitTree &tree);
void mid_travel(BitTree tree,BitTree &bsTree);

int main()
{
BitTree pTree;
BitTree bsTree=NULL;
cout<<"please input data of the tree:"<<endl;
creat_tree(pTree);
mid_travel(pTree,bsTree);
//输出节点信息
while (bsTree)
{
cout<data<<" ";
bsTree=bsTree->ltree;

}
system("pause");
return 0;
}

void creat_tree(BitTree &tree)
{
int data;
cin>>data;
//退出条件
if (data==0)
{
tree=NULL;
return;
}
else
{
tree=new bitTree;
if (tree==NULL)
{
exit(0);
}
tree->data=data;
//创建左子树
creat_tree(tree->ltree);
//创建右子树
creat_tree(tree->rtree);
}
}
//中序访问
void mid_travel(BitTree tree,BitTree &bsTree)
{
if (tree==NULL)
{
return ;
}
//记录当前节点
BitTree pro_node=tree;
if (tree->ltree!=NULL)
{

mid_travel(tree->ltree,bsTree);
}
//通过bstree与pro_node实现双联表的转换
pro_node->ltree=bsTree;
if (bsTree!=NULL)
{
bsTree->rtree=pro_node;
}
bsTree=pro_node;
//访问右分支
if (tree->rtree!=NULL)
{
mid_travel(pro_node->rtree,bsTree);
}
return ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 二叉树 算法 链表