33,010
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
char chValue;
struct Node *lChild;
struct Node *rChild;
}Node;
//重建二叉树
void Rebuild(char *pPreOrder , char *pInOrder , Node **pRoot , int nTreeLen)
{
Node *p;
char *pLeftEnd;
int nLeftLen , nRightLen;
if(!pPreOrder || !pInOrder || !pRoot) //边界条件
{
return;
}
p = (Node *)malloc(sizeof(Node));
p->chValue = *pPreOrder;
p->lChild = p->rChild = NULL;
*pRoot = p;
if(1 == nTreeLen)
{
return;
}
pLeftEnd = pInOrder; //nLeftLen , nRightLen为左右结点数
while(*pLeftEnd != *pPreOrder)
{
pLeftEnd++;
}
nLeftLen = (int)(pLeftEnd - pInOrder);
nRightLen = nTreeLen - nLeftLen - 1;
if(nLeftLen)
{
Rebuild(pPreOrder+1,pInOrder,&((*pRoot)->lChild),nLeftLen);
}
if(nRightLen)
{
Rebuild(pPreOrder+nLeftLen+1,pInOrder+nLeftLen+1,&((*pRoot)->rChild),nRightLen);
}
}
//后序遍历
void PostOrder(Node * T)
{
if(T)
{
PostOrder(T->lChild);
PostOrder(T->rChild);
printf("%c ",T->chValue);
}
}
int main(void)
{
char pPreOrder[] = "HDBACGFE"; //前序序列
char pInOrder[] = "BADCHGEF"; //中序序列
Node *T;
Rebuild(pPreOrder,pInOrder,&T,8);
PostOrder(T);
return 0;
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 求后序遍历</TITLE>
<script type="text/javascript">
/*
作者:Andensy
功能:求二叉树后序遍历
时间:2010-01-26
*/
var calOrder=function(preOrder,inOrder)
{
if(preOrder==""|preOrder.length==1) return preOrder;
if(inOrder==""|inOrder.length==1) return inOrder;
var index=inOrder.indexOf(preOrder.substring(0,1)); //获得前序第一个节点在中序中的位置
var inlOrder=inOrder.substring(0,index); //中序遍历根的左树
var inrOrder=inOrder.substring(index+1,inOrder.length+1); //中序遍历根的右树
var prelOrder=preOrder.substring(1,index+1); //先序遍历左树
var prerOrder=preOrder.substring(index+1,preOrder.length); //先序遍历右树
document.write(prelOrder+"\t"+inlOrder);
document.write("----------------------");
document.write(prerOrder+"\t"+inrOrder);
document.write("<br>");
return calOrder(prelOrder,inlOrder)+calOrder(prerOrder,inrOrder)+preOrder.substring(0,1);
}
var pre="ABCDEFG";
var ino="CBEDAFG";
var cal=calOrder(pre,ino);
document.write(cal);
</script>
</HEAD>
<BODY>
</BODY>
</HTML>