可能編譯時會有些語法小錯誤(比如分號,->,等),很容易就自己糾正了哦,思路絕對是完全正確的,所以用的話就自己試著改改吧,直接復制粘貼,就正確,豈不是太沒寫代碼體驗了,自己改改才印象更加深刻的呢(▽)~~~~;
#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=https://www.cnblogs.com/ygjzs/p/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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/125576.html
標籤:其他
上一篇:非遞回遍歷樹
下一篇:建立二叉樹
