《Tree Restoration》题目分析
这道题乍一看可能会觉得无从下手。其实就是模拟手算过程,考察代码能力。可以想想拿到样例手算是怎么算的。
基本思路就是自底向上递推。
5在最左边,所以5的父节点肯定是2。
6和5的距离是2,所以5和6肯定有公共父节点。于是6的父节点也是2。
7和6的距离大于2,所以7和6肯定没有公共父节点。于是7的父节点是4(3是叶子结点,所以不会是7的父节点)。
8和7距离是2,所以8的父节点也是4。
同理一层一层向上推就行了。
这题数据范围非常小,节点数只有100。所以可以不太考虑算法的时间复杂度,找到一个正确的算法就能AC。
每次从左到右找这个结点要到其子孙中叶节点之间的距离,用其叶节点与下一个同样的叶节点之间距离减这两段小距离,结果等不等于2,判断这两个相邻的结点和上一层节点关系。这样处置直到第1层。