【leetcode563】二叉树的坡度

【声明】非商业用途,仅供各位学习!来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-tilt给定一个二叉树,计算 整个树 的坡度 。 一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。整个树的坡度就是其所有节点的坡度之和。示例1:将 求整个树的坡度...
摘要由CSDN通过智能技术生成

【声明】

非商业用途,仅供各位学习!

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-tilt

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

      一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。

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

 示例1:

求整个树的坡度 分成求每一个节点的坡度!

先求节点2和节点3的坡度,由于两个节点都是叶子节点,所以:

节点2的坡度 = | 0 - 0 | = 0

节点3的坡度 = | 0 - 0 | = 0

 再求节点1的坡度:等于左子树之和 减去 右子树之和 的绝对值

节点1的坡度 = | 2 - 3 | = 1

此二叉树的总坡度就是:0 + 0 + 1 =

 代码解法:

class Solution {
public:
    int findTilt(TreeNode* root) {     
        int sum = 0;         //用sum保存总坡度
        find(root, sum);
        return sum;
    }
    int find(TreeNode* root,int& sum){   //递归求解
        //递归终止条件
        if(root == nullptr){
            return 0;    //空节点的坡度为0
        }
        int left, right;    //保存左子树和右子树的坡度
        left = find(root->left, sum);        //得到左子树之和
        right = find(root->right, sum);      //得到右子树之和
        sum += abs(left - right);            //求得当前节点的坡度并保存
        return root->val + left + right;    //返回当前子树节点之和
    }
};

 PS:写本文章的目的主要是记录自己的刷题历程,写的不好请轻点喷~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值