把二元查找树转变成排序的双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
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);
}