博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 979. 在二叉树中分配硬币
阅读量:4326 次
发布时间:2019-06-06

本文共 1137 字,大约阅读时间需要 3 分钟。

目录

题目描述:

给定一个有 N 个结点的二叉树的根结点 root,树中的每个结点上都对应有 node.val 枚硬币,并且总共有 N 枚硬币。

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

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

 

示例 1:

1615582-20190621152348153-388985884.png

输入:[3,0,0]输出:2解释:从树的根结点开始,我们将一枚硬币移到它的左子结点上,一枚硬币移到它的右子结点上。

示例 2:

1615582-20190621152401071-610863786.png

输入:[0,3,0]输出:3解释:从根结点的左子结点开始,我们将两枚硬币移到根结点上 [移动两次]。然后,我们把一枚硬币从根结点移到右子结点上。

示例 3:

1615582-20190621152414761-1254636182.png

输入:[1,0,2]输出:2

示例 4:

1615582-20190621152426473-693762598.png

输入:[1,0,0,null,3]输出:4

提示:

  • 1<= N <= 100
  • 0 <= node.val <= N

解法:

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    int distributeCoins(TreeNode* root, int& res){        if(root == NULL){            return 0;        }else{            int left = distributeCoins(root->left, res);            int right = distributeCoins(root->right, res);            root->val += left + right;            res += abs(root->val - 1);            return root->val - 1;        }    }        int distributeCoins(TreeNode* root) {        int res = 0;        distributeCoins(root, res);        return res;    }};

转载于:https://www.cnblogs.com/zhanzq/p/11064848.html

你可能感兴趣的文章
AngularJS Scope(作用域)
查看>>
HttpClient相关
查看>>
DEPHI XE5 XE6 ANDROID IOS开发的几点体会
查看>>
angular.js 验证码注册登录
查看>>
团队站立会议08
查看>>
软件自动化测试学习步骤
查看>>
vector 简单使用
查看>>
20139216网络攻防技术第七次作业
查看>>
Sublime Text 配置
查看>>
【杂谈】需要mark的一些东西
查看>>
P2731 骑马修栅栏 欧拉函数
查看>>
sort函数
查看>>
CentOS-6.3安装配置Nginx
查看>>
女陔说"你不懂我", 到底什么意思
查看>>
uva11149
查看>>
S/4HANA中的销售计划管理
查看>>
【图灵学院09】RPC底层通讯原理之Netty线程模型源码分析
查看>>
非常的好的协同过滤入门文章(ZZ)
查看>>
数据结构:哈希表
查看>>
markdown 基本语法
查看>>