根据一棵树的BFS和DFS序列还原这颗树的结构。关于树的一种新的类型的题,mark。
链接
题目链接Uva10410-Tree Reconstruction
参考链接20143605–pcx’s Blog和Chengrui’s Blog
题解
用BFS序列去分离DFS,首先根据BFS序列顺序记录每个节点的位置。子结点的下标一定比父结点的下标至少大于1,(根节点除外,根结点和第一个子结点的下标距离等于1)。
用栈维护DFS序列,根据条件不断判断栈中的top结点和新读入结点之间的位置关系,若top结点下标 + 1 < 新结点下标,或者top结点是根节点
,则表示新结点是top的结点的一个子结点;若top结点下标 + 1 = 新结点下标
,表示新结点和top结点之间是兄弟结点,同时表示当前top结点往下的分支已扫描完毕,pop出top结点;若top结点下标 + 1 > 新结点下标
,表示新结点已不在top结点所在子树,同样pop出top结点。
代码
1 | /* |