#include<iostream> using namespace std; typedef struct BiNode{ char data; struct BiNode *lchild,*rchild; }BiTNode,*BiTree; typedef struct StackNode{ BiTNode data; struct StackNode *next; } void CreateBiTree(BiTree &T){ char ch; cin>>ch; if(ch=='#') T=NULL; else{ T=new BiTNode; T->data=ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } } void InitStack(LinkStack &S) { //构造一个空栈S,栈顶指针置空 S=NULL; } bool StackEmpty(LinkStack S) { if(!S) return true; return false; } void Push(LinkStack &S,BiTree e) { //在栈顶插入元素*e StackNode *p=new StackNode; p->data=*e; p->next=S; S=p; } void Pop(LinkStack &S,BiTree e) { if(S!=NULL)//原书上写的是if(S==NULL)return ERROR; { *e=S->data; StackNode *p=S; S=S->next; delete p; } } void Copy(BiTree T,BiTree &newT){ if(T==NULL){ newT=NULL; return; }else{ newT=new BiTNode; newT->data=T->data; Copy(t->lchild,newT->lchild); Copy(t->rchild,newT->rchild); } } void InOrderTraverse(BiTree T) { //中序遍历二叉树T的递归算法 if(T){ InOrderTraverse(T->lchild); cout << T->data; InOrderTraverse(T->rchild); } } void main() { BiTree tree,new_tree; cout<<"请输入创建二叉树的序列:\n"; CreateBiTree(tree); Copy(tree,new_tree); cout<<"复制获得的新树的中序序列:\n"; InOrderTraverse(new_tree); cout<<endl; }