前序遍历:根左右

中序遍历:左根右

后序遍历:左右根

P3916图的遍历

题意:求每个节点能到达最大节点的编号;

SOL:反向建边,倒序枚举最大节点能到达的点。

如果枚举每个点的出边,会发现出边的出边的出边……才是最终的结果,考虑反向建图,倒序枚举最大的点,dfs,这个点能到达的所有的点都更新一遍,第一遍更新的时候一定是最大值,所以如果已经算过一遍就直接return。

P1229遍历问题(已知前序后序遍历,求中序遍历有几种)

tip:只有一个儿子 的节点 才会在知道 前序后序 的情况下有不同的中序遍历,
所以将题目转化成找 只有一个儿子的节点个数。

分析:在先序遍历中某一元素A的后继元素B(**B可能是A的左节点或A无左节点,B为A的右节点**),如果在后序遍历中A的前驱元素是B
**B可能是A的右节点或A无右节点,B为A的左节点** ,

综上,**那么A只有一个子树,** 问题即得解,

SOL:求出有x个节点的子树只有一个(那么中序遍历就可能是左子树或右子树两种),答案即为2^x;

代码

P1443 马的遍历

printf("%-5lld",f[i][j]);

代码

P5407 [THUPC2019]历史行程

蔡勒公式的运用

int week=(c/4)-2c+(y+y/4)+(13(month+1))/5+day-1;

代码