GLORY | 学习·记录

coding for life

POJ 2255 Tree Recovery

根据先序和中序确定后序的题目,非常经典的数据结构题目。

假如有一棵树的先序遍历是
DBACEGF,后序遍历是ABCDEFG。
因为先序遍历是根节点-左子树-右子树,所以可以确定D是这颗树的根节点。
考虑中序遍历是左子树-根节点-右子树,所以中序的序列被根节点分成了两个部分,在这里就是ABC和EFG,分别是左子树和右子树。
接下来可以确定的以D为根节点的数的左子树的先序遍历为BAC(节点个数根据中序的左子树节点个数确定),右子树的先序遍历为EGF.
这样,我们的问题就转化成为了与源问题相同的两个子问题,那么就可以通过递归来实现,结束的条件就是子树只剩一个节点,这个时候先序和中序是一样的,打印出来,然后return到上一级。
综上,解决办法就是现找到根节点,然后根据中序列划分成两个部分,然后分别递归解决。
需要注意的是,可能出现这样的状况:先序为AB,中序为BA;或者先序为AB,中序为AB的情况。即划分子树的时候可能右子树或者左子树为空
所以需要加一个判断,就是是否用来指示序列的左指针已经大于右指针。

POJ 3094  Quicksum实在太水,提一声就ok。

posted on 2010-07-14 23:44 meglory 阅读(137) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

随笔分类

随笔档案

最新评论