leetcode

Leetcode Solutions (0x6A73)
git clone https://git.pngu.org/leetcode
Log | Files | Refs | Submodules | README

distribute_coins_binary_tree.c (866B)


// 979. Distribute Coins in Binay Tree
#include "leetcode.h"

/*
 * given the 'root' of a binary tree with 'n' nodes where each 'node' is the
 * tree that has 'node.val' coins. there are 'n' coins in total throughout the
 * whole tree. in one move, we may choose two adjacent nodes and move one coin
 * from one node to another. a move may be from parent to child, or from child
 * to parent. return the minimum number of moves required to make every node
 * have exactly one coin.
 */

struct TreeNode {
  int val;
  struct TreeNode *left;
  struct TreeNode *right;
};

int dfs(struct TreeNode *root, int steps) {
  if (!root)
    return 0;
  int val = root->val + dfs(root->left, steps) + dfs(root->right, steps);
  steps += abs(val - 1);
  return val - 1;
}

int distributeCoins(struct TreeNode *root) {
  int steps = 0, tmp = dfs(root, steps);
  return steps;
}