您的位置:首页 > 理论基础 > 数据结构算法

微软等数据结构+算法面试100题(43)-- 把二元查找树转变成排序的双向链表

2012-11-12 10:16 591 查看
把二元查找树转变成排序的双向链表

题目:

输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。

要求不能创建任何新的结点,只调整指针的指向。

10

/ \

6 14

/ \ / \

4 8 12 16

转换成双向链表


4=6=8=10=12=14=16。

/*
1.把二元查找树转变成排序的双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/     \
6     14
/ \     /  \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
*/
void TreeToList(TreeNode* root,TreeNode* &head,TreeNode* &pre)
{
if(root==NULL)
return;
TreeToList(root->left,head,pre);
if(head==NULL)
head=root;
if(pre!=NULL)
pre->right=root;
root->left=pre;
pre=root;
TreeToList(root->right,head,pre);
}

void ShowList(TreeNode *head,TreeNode *last)
{
while(head!=NULL)
{
cout<<head->data<<" ";
head=head->right;
}
cout<<endl;
while(last!=NULL)
{
cout<<last->data<<" ";
last=last->left;
}
cout<<endl;
}

void TreeToListTest()
{
TreeNode* root=NULL;
cout<<"make tree"<<endl;
MakeTree(root);
cout<<"the tree : ";
LevelOrderTraverse(root);
cout<<"the tree : "<<endl;
LevelOrderTraverse1(root);
cout<<"the tree : ";
PreOrderTraverseNoRecursion(root);
TreeNode* head=NULL;
TreeNode* pre=NULL;
TreeToList(root,head,pre);
ShowList(head,pre);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐