• 【力扣 032】563. 二叉树的坡度


    563. 二叉树的坡度

    给你一个二叉树的根节点 root ,计算并返回 整个树 的坡度 。

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

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

    示例 1:


    输入:root = [1,2,3]
    输出:1
    解释:
    节点 2 的坡度:|0-0| = 0(没有子节点)
    节点 3 的坡度:|0-0| = 0(没有子节点)
    节点 1 的坡度:|2-3| = 1(左子树就是左子节点,所以和是 2 ;右子树就是右子节点,所以和是 3 )
    坡度总和:0 + 0 + 1 = 1
    示例 2:


    输入:root = [4,2,9,3,5,null,7]
    输出:15
    解释:
    节点 3 的坡度:|0-0| = 0(没有子节点)
    节点 5 的坡度:|0-0| = 0(没有子节点)
    节点 7 的坡度:|0-0| = 0(没有子节点)
    节点 2 的坡度:|3-5| = 2(左子树就是左子节点,所以和是 3 ;右子树就是右子节点,所以和是 5 )
    节点 9 的坡度:|0-7| = 7(没有左子树,所以和是 0 ;右子树正好是右子节点,所以和是 7 )
    节点 4 的坡度:|(3+5+2)-(9+7)| = |10-16| = 6(左子树值为 3、5 和 2 ,和是 10 ;右子树值为 9 和 7 ,和是 16 )
    坡度总和:0 + 0 + 0 + 2 + 7 + 6 = 15
    示例 3:


    输入:root = [21,7,14,1,1,2,2,3,3]
    输出:9
     

    提示:

    树中节点数目的范围在 [0, 104] 内
    -1000 <= Node.val <= 1000

    代码实现:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
     * };
     */
    class Solution {
    public:
        int findTilt(TreeNode* root) {
            if(!root) return 0;
            int res = 0;
            dfs(root, res);
            return res;
        }
        int dfs(TreeNode *root, int &res)
        {
            if(!root) return 0;
            int l = dfs(root->left, res);
            int r = dfs(root->right, res);
            res += abs(l-r);
            return l + r + root->val;
        }
    };
  • 相关阅读:
    因浮动问题导致的IE6/7下的换行
    弹性回到顶部js代码
    页面图片的缩放问题
    js练习小结
    地址给的越精确,优先级越高
    判断IE浏览器的版本
    img图像对齐的方式
    三级导航收缩下拉框
    功能已经实现
    AE创建一个空白的Shapefile
  • 原文地址:https://www.cnblogs.com/sunbines/p/16290193.html
Copyright © 2020-2023  润新知