#include<iostream.h>
class Node
{
friend class BSTree;
friend void MiddlePrint(Node* root);
public:
Node(int ele=0,Node *l=NULL,Node *r=NULL):element(ele),left(l),right(r){}
public:
int element;
Node *left;
Node *right;
};
class BSTree
{
public:
BSTree()
{
root=NULL;
}
void InsertElement(int ele)
{
if(root==NULL)
root=new Node(ele);
else
{
Node *current=root;
Node *result=NULL;
while(current!=NULL)
{
result=current;
if(ele<current->element)
current=current->left;
else
current=current->right;
}
Node *node=new Node(ele);
if(ele<result->element)
result->left=node;
else
result->right=node;
}
}
Node* GetRoot()const
{
return root;
}
private:
Node *root;
};
void MiddlePrint(Node* root)
{
Node *temp=root;
if(temp==NULL)
return;
MiddlePrint(temp->left);
cout<<temp->element<<" ";
MiddlePrint(temp->right);
}
typedef Node DoubleList;
DoubleList *head=NULL;
DoubleList *end=NULL;
//核心代码
DoubleList* ConverToDoubleList(Node *root)
{
Node *temp=root;
if(temp==NULL)
return NULL;
ConverToDoubleList(temp->left);
temp->left=end;
if(end==NULL)
end=head=temp;
else
{
end->right=temp;
}
end=temp;
ConverToDoubleList(temp->right);
return head;
}
void PrintDoubleList(DoubleList *head)
{
while(head!=NULL)
{
cout<<head->element<<" ";
head=head->right;
}
}
int main()
{
BSTree tree;
int arr[]={10,6,14,4,8,12,16};
int size=sizeof(arr)/sizeof(int);
for(int i=0;i<size;i++)
tree.InsertElement(arr[i]);
cout<<"该二叉树的中序输出为:"<<endl;
MiddlePrint(tree.GetRoot());
cout<<endl;
DoubleList *head=ConverToDoubleList(tree.GetRoot());
PrintDoubleList(head);
return 0;
}