高手请进!!!一个数据结构的算法问题!!!
fi9 2002-05-14 02:23:28 已知一棵二叉树的先序与中序序列,现想求出它的后序序列;请用程序写出。
//---------------------------------------
这是我的一个思路!大家看看行不!
void GetTree(CMyTree *pMyTree, char cCurr, char *cpFList, char *cpMList)
//二叉树,当前结点,前序,中序
{
int nPinML;//父结点在中序中的位置
int nCinML;//当前结点在中序中的位置
char cP;//父结点的值
/*
cP = pMyTree->GetNode();//求了它的值
//再由cP,cCurr和cpMList分别求出nPinML和nCinML
if (nCinML > nPinML)//当前结点是右结点
cpMList->AddRight(cP);//添加右结点
if (nCinML < nPinML)//当前结点是左结点
cpMList->AddLeft(cP);//添加左结点
else//等于;当前结点是树的根
cpMList->AddNode();//添加结点
cpFList++;
if (cpFList)//非串尾
GetTree(pMyTree, *cpFList, cpFList, cpMList );//递归
*/
}
int main(void)
{
char *cpFList;//前序
char *cpMList;//中序
CMyTree *pMyTree = new CMyTree();//二叉树
//输入字符到cpFList and cpMList
pMyTree->AddNode(*cpFList);//前序的第一个结点为根
cpFList++;//前序指向下一个结点
//由前序与中序生成树
//树的指针,前序的当前结点,前序,中序
GetTree(pMyTree, *cpFList; cpFList, cpMList);
pMyTree->GetBackList;//求出树的后序
}
//------------------------------------------------
回去又在想了一下,上面我的那个思想是在一个条件下去想的
这个条件就是:整棵树的每个结点都是唯一的
想一下没有这个条件限制的情况之下的:
如:
前序是: *++ABCD
中序是: A+B+C*D
生成的二叉树应该是:
_________*______
________/__\_____
_______+___D____
______/__\_______
_____+___C______
____/__\_________
___A___B_________
//------------------------------------------------
看看大家有什么好点的方法
//------------------------------------------------
详情请看:
http://cpp.chinaccd.net/bbs/showthread.php?s=&postid=5208#post5208