#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; }