今天是坚持每日一题打卡的第二十二天


题目链接:https://leetcode-cn.com/problems/binary-tree-tilt/


题解汇总:https://zhanglong.blog.csdn.net/article/details/121071779


题目描述

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

一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 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


代码:先序遍历 + 递归计算左右子树差值

class Solution {private:int res = 0;
public:int findTilt(TreeNode* root) {preOrder(root);return res;}// 前序遍历void preOrder(TreeNode *t) {if(t == nullptr) return;int sumOfLeftNode = 0, sumOfRightNode = 0;if (t->left != nullptr) {sumOfLeftNode = countOfSlope(t->left);}if (t->right != nullptr) {sumOfRightNode = countOfSlope(t->right);}res += abs(sumOfRightNode-sumOfLeftNode);if(t->left != nullptr) preOrder(t->left);if(t->right != nullptr) preOrder(t->right);}// 计算坡度int countOfSlope(TreeNode *t) {if (t == nullptr) return 0;if (t->left != nullptr && t->right != nullptr) {                // 两个子节点都非空return countOfSlope(t->left) + countOfSlope(t->right) + t->val;} else if (t->left == nullptr && t->right != nullptr) {         // 右节点非空return countOfSlope(t->right) + t->val;} else if (t->left != nullptr && t->right == nullptr) {         // 左节点非空return countOfSlope(t->left) + t->val;} else if (t->left == nullptr && t->right == nullptr) {         // 左右节点都空,返回本值return t->val;}return 0;}
};

优化:将遍历 + 计算合一

class Solution {private:int res = 0;
public:int findTilt(TreeNode* root) {dfs(root);return res;}int dfs(TreeNode *t) {if(t == nullptr) return 0;int sumOfLeftNode = 0, sumOfRightNode = 0;if(t->left != nullptr) {sumOfLeftNode = dfs(t->left);}if(t->right != nullptr) {sumOfRightNode = dfs(t->right);}res += abs (sumOfLeftNode - sumOfRightNode);return sumOfLeftNode + sumOfRightNode + t->val;}
};

         ——他日若遂凌云志,敢笑黄巢不丈夫。

解题报告-Leecode 563. 二叉树的坡度——Leecode每日一题系列相关推荐

  1. LeetCode 391. 完美矩形(扫描线) / 318. 最大单词长度乘积 / 563. 二叉树的坡度

    391. 完美矩形 2021.11.16 每日一题 题目描述 给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形.这 ...

  2. 563. 二叉树的坡度

    题目 我的想法 从根节点开始,求出每个几点的度,然后累加.代码如下: # Definition for a binary tree node. class TreeNode:def __init__( ...

  3. 【解题报告】Leecode 372. 超级次方——Leecode每日一题系列

    题目链接:https://leetcode-cn.com/problems/super-pow/ 题解汇总:https://leetcode-cn.com/problems/max-increase- ...

  4. 【解题报告】Leecode 748. 最短补全词——Leecode每日一题系列

    题目链接:https://leetcode-cn.com/problems/shortest-completing-word/ 题解汇总:https://leetcode-cn.com/problem ...

  5. 【解题报告】Leecode 807. 保持城市天际线——Leecode每日刷题系列

    题目链接:https://leetcode-cn.com/problems/max-increase-to-keep-city-skyline/ 题解汇总:https://leetcode-cn.co ...

  6. 【解题报告】Leecode911. 在线选举——Leecode每日一题系列

    题目链接:https://leetcode-cn.com/problems/online-election/ 题解汇总:https://zhanglong.blog.csdn.net/article/ ...

  7. 【解题报告】Leecode 519. 随机翻转矩阵——Leecode每日一题系列

    今天是坚持每日一题打卡的第二十六天 题目链接:https://leetcode-cn.com/problems/random-flip-matrix/solution/ 题解汇总:https://zh ...

  8. 【解题报告】Leecode 438. 找到字符串中所有字母异位词——Leecode每日一题系列

    今天是坚持每日一题打卡的第二十七天 题目链接:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/ 题解汇总:https:// ...

  9. 【解题报告】Leecode 859. 亲密字符串——Leecode每日一题系列

    今天是坚持每日一题打卡的第二十四天 题目链接:https://leetcode-cn.com/problems/buddy-strings/ 题解汇总:https://zhanglong.blog.c ...

最新文章

  1. 2022-2028年中国铁路机车行业投资分析及前景预测报告
  2. 怎么知道 网站是否直接明文保存密码_忘记账号密码 浏览器记住了 怎么找回密码?...
  3. 【EventBus】发布-订阅模式 ( EventBus 组成模块 | 观察者模式 )
  4. 变分自编码器VAE:这样做为什么能成?
  5. 【269】蓝牙键盘连接
  6. Java实现队列(循环队列,链队列)
  7. 带有示例的Python File readlines()方法
  8. python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...
  9. AjaxControlToolkit工具控件之Accordion错误解决方法
  10. 全媒体平台可以适度超前
  11. 安装java错误_安装JAVA JDK错误提示正在进行另一JAVA安装解决方法
  12. 中国象棋计算机比赛,2019年象棋软件大赛:四核弱机(56核)vs天命智棋(48核)...
  13. 进销存数据库设计 For MysQL
  14. mac word无法显示仿宋字体解决方案
  15. 激光计算机的基本原理和特点,3D激光传感器的原理及特点
  16. siteserver模板html5,SiteServer CMS软件模板制作教程
  17. 这条命令帮我在一分钟内修改了200台远程服务器密码!
  18. 如何使用计算机求和公式,excel求和公式怎么用
  19. java idle机制_Java培训:Tomcat中session的钝化与活化机制详解
  20. IDEA2021.2安装与配置(持续更新)

热门文章

  1. 区分Debug版还是Relase版
  2. 你已经用上 5G 网络了吗?
  3. idea打断点启动项目后debug红点内没有√,导致无法调试
  4. Spectre CPU漏洞借着BPF春风卷土重来
  5. 建议收藏 | 全面解析 50+条 SQL 语句性能优化策略
  6. Java多线程知识小抄集(二)
  7. 视频编码器的智能化——AI辅助编解码的ASIC解决方案
  8. 拍乐云基于AV1的实时视频系统技术实践
  9. 即构科技邱国钦:遇到问题解决问题 慢慢点可以拟合成线
  10. 吉长江:基于学习的视频植入技术是未来趋势