这是一道非常典型的rooted-tree内的路径问题。在给定root的树型图里,任何路径都必然有一个拐点,我们遍历所有的节点,考虑对每个节点作为拐点时的最优路径,这样我们就可以做到不遗漏地求出全局的最优路径。
对于本题而言,以Node为拐点的最长路径,必然由两条以它孩子节点为起点的最长单链路径(即一直向下没有拐弯)拼接组成。所以本题的核心就转化为,求对于每个节点,从它往下走能够找到的最长单链路径h。很显然这个函数具有递归性质:
h(node) = h(node->child) +1 (if node is different from its child), otherwise 1
有了h之后,考虑每个节点作为拐点时,转化为能否找到两个可以与自己拼接起来的、孩子的最长单链即可。在全局中找最优解。