Leetcode979 : Distribute Coins in Binary Tree 二叉树均匀分配硬币问题
2024-09-01 22:35:27
问题
给定一个二叉树的root节点,二叉树中每个节点有node.val个coins,一种有N coins。 现在要求移动节点中的coins 使得二叉树最终每个节点的coins value都为1。每次移动,我们只能向相邻接点移动,也就是说coins 只能向父节点或者子节点移动,那么求最终需要移动多少步。
Leetcode原题链接: https://leetcode.com/problems/distribute-coins-in-binary-tree/
分析
如果叶子节点有0个coins,那么我们需要从parent节点移一个coin到叶子节点 (push (-1) 个coin from left node); ----move一次
如果说叶子节点有四个节点那么我们则需要push三个coins到父节点(push +3 coins from leaf node)。----move 三次
定义一个dfs(node)函数,用于表示需要从当前节点push 到its parent节点的coins个数(换句话说就是以当前节点为root的子树中的硬币总数 减去当前总数节点的个数),那么dfs(node) = dfs(node.left) + dfs(node.right) - 1 (减去一个1是因为留一个coin在当前节点) ,而使得以当前节点为root节点需要移动的步数等于abs(dfs(node.left)) + abs(dfs(node.right))。
实现
private int ans = 0;
public int distributeCoins(TreeNode root) {
ans = 0;
distributeCoinsHelper(root);
return ans;
}
private int dfs(TreeNode cur){
if(cur == null){
return 0;
}
int left = dfs(cur.left);
int right = dfs(cur.right);
ans += Math.abs(left) + Math.abs(right);
return left + right + cur.val - 1;
}
最新文章
- vim 命令详解
- Windowns 10打开此电脑缓慢问题的一种解决办法
- 转:Connection: close和Connection: keep-alive有什么区别?
- 解决dnu restore时的“Cannot handle address family”问题
- shell 随机从文件中抽取若干行
- 在Spring Data JPA 中使用Update Query更新实体类
- https+ssl详解
- POJ 2106 Boolean Expressions (布尔表达式求值)
- Core Animation系列之CADisplayLink(转)
- [置顶] Firefox OS 学习——简单了解知识
- Opentsdb 启动显示配置文件不存在
- “数学口袋精灵”App的第三个Sprint计划----开发日记
- openwrt 添加 802.1x客户端njit
- Top k问题的讨论(三种方法的java实现及适用范围)
- 数据库(mysql)
- JSON调试找不到 net.sf.ezmorph.Morpher
- HashMap(JDK1.9)详解
- FAILED Selenium2Library
- exBSGS学习笔记
- 【Networking】Libevent客户端例子
热门文章
- 基于 HTML5 + WebGL 的宇宙 3D 展示系统
- 深入浅出Spring(四)
- 《一张图看懂华为云BigData Pro鲲鹏大数据解决方案》
- git配置文件—— .editorconfig
- 【转】Nginx + CGI/FastCGI + C/Cpp
- 【JS】336- 拆解 JavaScript 中的异步模式
- Win32_PhysicalMedia 硬盘 参数说明
- 【树莓派】制作启动SD卡
- Manjaro-kde-18.1.3安装体验
- vue-cli3抽离配置文件,动态修改打包后配置