当前位置: 首页 > news >正文

深度优先搜索LeetCode979. 在二叉树中分配硬币

给你一个有 n 个结点的二叉树的根结点 root ,其中树中每个结点 node 都对应有 node.val 枚硬币。整棵树上一共有 n 枚硬币。

在一次移动中,我们可以选择两个相邻的结点,然后将一枚硬币从其中一个结点移动到另一个结点。移动可以是从父结点到子结点,或者从子结点移动到父结点。

返回使每个结点上 只有 一枚硬币所需的 最少 移动次数。

每个硬币移动一次就会经过一条边, 原问题可用转换为, 所有边被经过的次数之和。

二叉树中每一条边会连接一个子树,这个子树多的硬币会经过这条边,少的硬币会从其他地方运到该子树。

所以每个边被经过的次数,就是该边对应的子树中  节点个数  和  金币个数之差  的绝对值。

可以使用dfs来做。

vector<int>dfs(node *root):表示以root为根节点的树中 节点个数 和 金币个数 ,v[0]表示节点个数,v[1]表示金币个数。

vector<int>dfs(root):

  vector<int>v,left,right;

       if(root->left) 

             left  = dfs (root->left);res += abs(left[0]-left[1]); 

      if(root->right)

             right  = dfs (root->right); res += abs(right[0]-right[1]);

      v[0]=left[0]+right[0]+1;

      v[1]=left[1]+right[1]+root->val;

     return v;  

       

 

class Solution {
public: int res=0;vector<int>dfs(TreeNode *root){vector<int>v(2,0);vector<int>left(2,0);vector<int>right(2,0); if(root->left){left = dfs(root->left);}if(root->right){right = dfs(root->right); }res += abs(left[0]-left[1]);res += abs(right[0]-right[1]);v[0]=left[0]+right[0]+1;v[1]=left[1]+right[1]+root->val;return v;}int distributeCoins(TreeNode* root) {dfs(root);return res;}
};

http://www.lryc.cn/news/253383.html

相关文章:

  • C++学习之路(十)C++ 用Qt5实现一个工具箱(增加一个时间戳转换功能)- 示例代码拆分讲解
  • Linux 5.15安全特性之ARM64 PAC
  • 同旺科技 分布式数字温度传感器
  • 状态空间的定义
  • 数据挖掘实战-基于word2vec的短文本情感分析
  • 大数据面试总结
  • 利大于弊:物联网技术对电子商务渠道的影响
  • Python 元组详解(tuple)
  • Redis部署-主从模式
  • 全栈冲刺 之 一天速成MySQL
  • 服务器运行train.py报错解决
  • Flutter开发type ‘Future<int>‘ is not a subtype of type ‘int‘ in type cast错误
  • Nginx(十二) gzip gzip_static sendfile directio aio 组合使用测试(2)
  • hls实现播放m3u8视频将视频流进行切片 HLS.js简介
  • Ubuntu20.04部署TVM流程及编译优化模型示例
  • 华为OD机试真题-两个字符串间的最短路径问题-2023年OD统一考试(C卷)
  • python try-except
  • flutter开发实战-ValueListenableBuilder实现局部刷新功能
  • 通过时间交织技术扩展ADC采样速率的简要原理
  • FluxMQ—2.0.8版本更新内容
  • 计算机寄存器是如何实现的
  • 两数之和 三数之和 哈希方法
  • Object Detection in 20 Years: A Survey(2019.5)
  • Springboot 设置时区与日期格式
  • 从零开始学Go web——第一天
  • 6.Eclipse里下载Subclipse插件
  • 家用洗地机哪个品牌最好最实用?热门洗地机测评
  • 【C语言:自定义类型(结构体、位段、共用体、枚举)】
  • 【1day】华天软件 OAworkFlowService接口SQL注入漏洞学习
  • Oracle(2-11)RMAN Backups