假设有一颗二叉树,已知这棵树的节点上不均匀的分布了若干石头,石头数跟这棵二叉树的
int moveStone(TNode* root, int& stone) {
if (!root) {
return 0;
}
int leftStone = 0, rightStone = 0;
if (root->left) {
//左子树需要移动次数,也就是当前结点会增加的石数
leftStone = moveStone(root->left, stone);
}
if (root->right) {
rightStone = moveStone(root->right, stone);
}
//超出本身1颗石子外的都需要移动
stone += abs(leftStone + rightStone + root->data - 1);
return leftStone + rightStone + root->data - 1;
}
节点数相同,石头只可以在子节点和父节点之间进行搬运,每次只能搬运一颗石头。请问如何以最少的步骤将石头搬运均匀,使得每个节点上的石头上刚好为1。