解题报告-Leecode 563. 二叉树的坡度——Leecode每日一题系列
今天是坚持每日一题打卡的第二十二天
题目链接: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每日一题系列相关推荐
- LeetCode 391. 完美矩形(扫描线) / 318. 最大单词长度乘积 / 563. 二叉树的坡度
391. 完美矩形 2021.11.16 每日一题 题目描述 给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形.这 ...
- 563. 二叉树的坡度
题目 我的想法 从根节点开始,求出每个几点的度,然后累加.代码如下: # Definition for a binary tree node. class TreeNode:def __init__( ...
- 【解题报告】Leecode 372. 超级次方——Leecode每日一题系列
题目链接:https://leetcode-cn.com/problems/super-pow/ 题解汇总:https://leetcode-cn.com/problems/max-increase- ...
- 【解题报告】Leecode 748. 最短补全词——Leecode每日一题系列
题目链接:https://leetcode-cn.com/problems/shortest-completing-word/ 题解汇总:https://leetcode-cn.com/problem ...
- 【解题报告】Leecode 807. 保持城市天际线——Leecode每日刷题系列
题目链接:https://leetcode-cn.com/problems/max-increase-to-keep-city-skyline/ 题解汇总:https://leetcode-cn.co ...
- 【解题报告】Leecode911. 在线选举——Leecode每日一题系列
题目链接:https://leetcode-cn.com/problems/online-election/ 题解汇总:https://zhanglong.blog.csdn.net/article/ ...
- 【解题报告】Leecode 519. 随机翻转矩阵——Leecode每日一题系列
今天是坚持每日一题打卡的第二十六天 题目链接:https://leetcode-cn.com/problems/random-flip-matrix/solution/ 题解汇总:https://zh ...
- 【解题报告】Leecode 438. 找到字符串中所有字母异位词——Leecode每日一题系列
今天是坚持每日一题打卡的第二十七天 题目链接:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/ 题解汇总:https:// ...
- 【解题报告】Leecode 859. 亲密字符串——Leecode每日一题系列
今天是坚持每日一题打卡的第二十四天 题目链接:https://leetcode-cn.com/problems/buddy-strings/ 题解汇总:https://zhanglong.blog.c ...
最新文章
- 2022-2028年中国铁路机车行业投资分析及前景预测报告
- 怎么知道 网站是否直接明文保存密码_忘记账号密码 浏览器记住了 怎么找回密码?...
- 【EventBus】发布-订阅模式 ( EventBus 组成模块 | 观察者模式 )
- 变分自编码器VAE:这样做为什么能成?
- 【269】蓝牙键盘连接
- Java实现队列(循环队列,链队列)
- 带有示例的Python File readlines()方法
- python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...
- AjaxControlToolkit工具控件之Accordion错误解决方法
- 全媒体平台可以适度超前
- 安装java错误_安装JAVA JDK错误提示正在进行另一JAVA安装解决方法
- 中国象棋计算机比赛,2019年象棋软件大赛:四核弱机(56核)vs天命智棋(48核)...
- 进销存数据库设计 For MysQL
- mac word无法显示仿宋字体解决方案
- 激光计算机的基本原理和特点,3D激光传感器的原理及特点
- siteserver模板html5,SiteServer CMS软件模板制作教程
- 这条命令帮我在一分钟内修改了200台远程服务器密码!
- 如何使用计算机求和公式,excel求和公式怎么用
- java idle机制_Java培训:Tomcat中session的钝化与活化机制详解
- IDEA2021.2安装与配置(持续更新)