/*
1.把二元查找树转变成排序的双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16
*/
#include <iostream>
struct btree_node
{
int val;
btree_node* left;
btree_node* right;
btree_node()
{
left=right=NULL;
val=0;
}
};
btree_node* head=NULL;
btree_node* index=NULL;
//采用中序遍历
void convert_to_dlist(btree_node* root)
{
if(root==NULL)
return ;
if(root->left!=NULL)
convert_to_dlist(root->left);
//
root->left=index;
if(index!=NULL)
index->right=root;
else
head=root;
index=root;
//
if(root->right!=NULL)
convert_to_dlist(root->right);
}
void add_val_to_btree(btree_node*& root,int val)
{
if(root==NULL)
{
root=new btree_node();
root->val=val;
root->right=root->left=NULL;
}
else
{
if(val<=root->val)
add_val_to_btree(root->left,val);
else
add_val_to_btree(root->right,val);
}
}
int main(int argc,char* argv[])
{
btree_node* root=NULL;
add_val_to_btree(root,10);
add_val_to_btree(root,6);
add_val_to_btree(root,14);
add_val_to_btree(root,4);
add_val_to_btree(root,8);
add_val_to_btree(root,12);
add_val_to_btree(root,16);
convert_to_dlist(root);
while(NULL!=head)
{
std::cout<<head->val<<" ";
head=head->right;
}
std::cout<<std::endl;
system("PAUSE");
return 0;
}
二叉树搜索树转双链表
最新推荐文章于 2019-06-20 22:35:57 发布