(Java)leetcode-563 Binary Tree Tilt(二叉树的坡度)

冷不防 2023-02-17 11:23 122阅读 0赞

题目描述

给定一个二叉树,计算整个树的坡度。

一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。

整个树的坡度就是其所有节点的坡度之和。

在这里插入图片描述
注意:

任何子树的结点的和不会超过32位整数的范围。
坡度的值不会超过32位整数的范围。

这道题目很容易读错题,以为是每个节点的左右孩子之差,于是应该补充一个更清晰的用例如下:
在这里插入图片描述

思路

由上面的用例可以清晰的看到,在计算节点1的坡度时,就需要知道其左右子树的节点之和,说明应该自下而上进行求和,因此适合这一特点的遍历应当是后序遍历。

我们遍历至某一节点时,先递归求出其左右子树的和,进而可以求出绝对值差,还能求出当前树的节点和(左+右+自身),并且返回给上一层,实现了自下而上的求和。

代码

  1. class Solution {
  2. int sum = 0;
  3. public int findTilt(TreeNode root) {
  4. travel(root);
  5. return sum;
  6. }
  7. // 此方法返回值为传入节点为根的树的节点之和
  8. private int travel(TreeNode root) {
  9. if (root == null) return 0;
  10. // 递归求左子树的节点和
  11. int leftSum = travel(root.left);
  12. // 递归求右子树的节点和
  13. int rightSum = travel(root.right);
  14. //计算该节点的坡度并添加到结果中
  15. sum += Math.abs(leftSum - rightSum);
  16. return leftSum + rightSum + root.val;
  17. }
  18. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,122人围观)

还没有评论,来说两句吧...

相关阅读

    相关 563. 坡度

    > 给定一个二叉树,计算 整个树 的坡度 。 > > 一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点