题目解析
本题我们可以先求解出整颗树的权值 sumWeight,然后求解出每个节点作为根的子树的权值 subWeight,那么剩余节点树的权值为:sumWeight - subWeight,二者差值绝对值为:abs(sumWeight - 2 * subWeight)。
本题的难点在于,如何求解出每个节点对应子树的权值。
思路一:我们可以还原树,然后从根节点递归,递归到叶子节点后开始回溯,回溯过程中,将子节点权值加入父节点,这样回溯完成后,每个节点的权值就是该节点为根的子树权值。
思路二:利用拓扑排序,求解出每个节点的入度(子节点指向父节点,节点的入度为该节点的子节点数量),以及记录每个节点的父节点(一个节点只有一个父节点)。如下图:
编号2,3的节点入度为0,则说明编号2,3节点为根的子树的权值归总完成。然后剥离编号2,3节点。剥离后:
- 被剥离节点的父节点入度-1
- 被剥离节点的权值加入其父节点
继续剥离: