1、早上
做本周二叉树和并查集题目的最后两个,做出了一个。(3h)
题解:先序遍历为根、左、右,后序遍历为左、右、根,对于有两个子儿子的节点显然是不能组成多个中序遍历的,而如果一个节点只有一个儿子,那么这个儿子不管是左儿子还是右儿子,都不影响先序和后序的顺序,只会影响中序遍历的顺序,那样总的中序遍历结果的个数就需要×2。所以我们本题只需要找有多少个节点是只有一个儿子的,而根据先序遍历和后序遍历的顺序,我们可以在先序遍历和后序遍历中找到相同的元素位置,如果先序遍历的后一个元素等于后序遍历的前一个元素,那么该节点就是只有一个儿子的节点。
#include <stdio.h>
main()
{char pre[30],post[30];
int cnt=1;
scanf("%s",pre);
scanf("%s",post);
for(int i=0;pre[i];i++)
for(int j=0;post[j];j++)
if(pre[i]==post[j]&&pre[i+1]==post[j-1]&&pre[i+1]&&post[j-1])
cnt*=2;
printf("%d",cnt);
}
2、下午
继续做最后一个题目,题目涉及了Floyd和tarjan知识,所以又看B站和大话数据结构学习相关知识,并写了本周的阅读报告。(2.5h)
今日总共学习时长5.5h。