找出二叉树的最优节点

153 篇文章

已下架不支持订阅

题目解析

本题我们可以先求解出整颗树的权值 sumWeight,然后求解出每个节点作为根的子树的权值 subWeight,那么剩余节点树的权值为:sumWeight - subWeight,二者差值绝对值为:abs(sumWeight - 2 * subWeight)。

本题的难点在于,如何求解出每个节点对应子树的权值。

思路一:我们可以还原树,然后从根节点递归,递归到叶子节点后开始回溯,回溯过程中,将子节点权值加入父节点,这样回溯完成后,每个节点的权值就是该节点为根的子树权值。

思路二:利用拓扑排序,求解出每个节点的入度(子节点指向父节点,节点的入度为该节点的子节点数量),以及记录每个节点的父节点(一个节点只有一个父节点)。如下图:

编号2,3的节点入度为0,则说明编号2,3节点为根的子树的权值归总完成。然后剥离编号2,3节点。剥离后:

  • 被剥离节点的父节点入度-1
  • 被剥离节点的权值加入其父节点

继续剥离:

已下架不支持订阅

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿甘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值