Leetcode Problem563

本文介绍了一种计算二叉树坡度的方法。通过递归地计算每个节点的左右子树节点之和来得到节点的坡度,并最终求得整棵树的坡度之和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Binary Tree Tilt

问题描述:


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

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

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


问题解决:问题所要求的是整个树所有节点的坡度之和,而坡度等于节点左子树的节点之和右子树节点之和的差的绝对值,所以我们要必须计算出所有节点的坡度。这种二叉树问题很容易想到用递归来实现,假设有一颗二叉树只有两层,一个根节点带着其左右两个子树,可以知道两个子节点的坡度都为0,根节点的坡度为左节点之和减去右节点之和,因为二叉树只有两层,故根节点的坡度为左子树减去右子树。那给到任意二叉树,我们要做的就是分别算出任意节点的左子树的节点之和与右子树的节点之和,然后就可以算出坡度之和。

class Solution {
public:
    int findTilt(TreeNode* root) {
        findtilt(root);
        return tilt;
    }
    int findtilt(TreeNode *root){
        if(!root)
            return 0;
        int lchild=findtilt(root->left);
        int rchild=findtilt(root->right);
        //坡度等于左节点之和减去右节点之和
        tilt+=abs(lchild-rchild);
        //返回左/右节点之和
        return lchild+rchild+root->val;
    }
private:
    int tilt=0;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值