#include<iostream>
using namespace std;
template<class DataType>
struct BiNode
{
DataType data;
BiNode<DataType> *rchild,*lchild;
};
template<class DataType>
class BiTree
{
private:
public:
BiNode<DataType> *Creat(BiNode<DataType> *bt)
{
char ch;
cin>>ch;//输入节点数据
if(ch=='#')bt=NULL;//建立一颗空树
else
{
bt=new BiNode<DataType>;
bt->data=ch;//生成一个节点,数据域为ch
bt->lchild=Creat(bt->lchild);//递归建立左子树
bt->rchild=Creat(bt->rchild);//递归建立右子树
}
return bt;
}
void PreOrder(BiNode<DataType> *bt)//前序遍历
{
if(bt==NULL)return;//递归调用的结束条件
else
{
cout<<bt->data<<endl;//前序递归遍历bt的数据域
PreOrder(bt->lchild);//前序递归遍历bt的左子树
PreOrder(bt->rchild);//前序递归遍历bt的左子树
}
}
void Copy(BiNode<DataType> *at,BiNode<DataType> *bt)
{
if(bt==NULL)return;//递归调用的结束条件
else
{
at=new BiNode<DataType>;
at->data=bt->data;
cout<<at->data<<endl;//前序递归遍历bt的数据域
Copy(at->lchild,bt->lchild);//前序递归遍历bt的左子树
Copy(at->rchild,bt->rchild);//前序递归遍历bt的左子树
}
}
};
int main()
{
BiNode<char> *root,*root1;
BiTree<char> b;
root = b.Creat(root);
cout<<endl;
b.PreOrder(root);
b.Copy(root,root1);
return 0;
}
using namespace std;
template<class DataType>
struct BiNode
{
DataType data;
BiNode<DataType> *rchild,*lchild;
};
template<class DataType>
class BiTree
{
private:
public:
BiNode<DataType> *Creat(BiNode<DataType> *bt)
{
char ch;
cin>>ch;//输入节点数据
if(ch=='#')bt=NULL;//建立一颗空树
else
{
bt=new BiNode<DataType>;
bt->data=ch;//生成一个节点,数据域为ch
bt->lchild=Creat(bt->lchild);//递归建立左子树
bt->rchild=Creat(bt->rchild);//递归建立右子树
}
return bt;
}
void PreOrder(BiNode<DataType> *bt)//前序遍历
{
if(bt==NULL)return;//递归调用的结束条件
else
{
cout<<bt->data<<endl;//前序递归遍历bt的数据域
PreOrder(bt->lchild);//前序递归遍历bt的左子树
PreOrder(bt->rchild);//前序递归遍历bt的左子树
}
}
void Copy(BiNode<DataType> *at,BiNode<DataType> *bt)
{
if(bt==NULL)return;//递归调用的结束条件
else
{
at=new BiNode<DataType>;
at->data=bt->data;
cout<<at->data<<endl;//前序递归遍历bt的数据域
Copy(at->lchild,bt->lchild);//前序递归遍历bt的左子树
Copy(at->rchild,bt->rchild);//前序递归遍历bt的左子树
}
}
};
int main()
{
BiNode<char> *root,*root1;
BiTree<char> b;
root = b.Creat(root);
cout<<endl;
b.PreOrder(root);
b.Copy(root,root1);
return 0;
}