[題目分析]知二叉樹中序序列與後序序列第題以遞歸算法建立了二叉樹本題是非遞歸算法
void InPostCreat(ElemType IN[]POST[]int lhlh)
//由二叉樹的中序序列IN[]和後序序列POST[]建立二叉樹lh和lh分別是中序序列和
//後序序列第一和最後元素的下標初始調用時l=l=h=h=n
{typedef struct {int lhlh; BiTree t; }node;
node s[]p;//s為棧容量足夠大
BiTree bt=(BiTree)malloc(sizeof(BiNode)); int top=i;
pl=l; ph=h; pl=l; ph=h; pt=bt; s[++top]=p;//初始化
while(top>)
{p=s[top]; bt=pt; l=pl; h=ph; l=pl; h=ph;//取出棧頂數據
for(i=l;i<=h;i++) if(IN[i]==POST[h]) break;//在中序序列中查等於POST[h]的結點
bt>data=POST[h]; //根結點的值
if(i==l) bt>lchild=null; //bt無左子樹
else //將建立左子樹的數據入棧
{bt>lchild=(BiTree)malloc(sizeof(BiNode)); pt=bt>lchild;
pl=l; ph=i; pl=l; ph=l+il; s[++top]=p; }
if(i==h) bt>rchild=null; //bt無右子樹
else {bt>rchild=(BiTree)malloc(sizeof(BiNode)); pt=bt>rchild;
pl=i+; ph=h; pl=l+il; ph=h; s[++top]=p; }//右子樹數據入棧
}// while(top>)
}結束InPostCreat
.BiTree Copy(BiTree t)//復制二叉樹t
{BiTree bt;
if (t==null) bt=null;
else{bt=(BiTree)malloc(sizeof(BiNode)); bt>data=t>data;
bt>lchild=Copy(t>lchild);
bt>rchild=Copy(t>rchild);
}
return(bt); }//結束Copy
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/23703.html