假设有一颗二叉树,已知这棵树的节点上不均匀的分布了若干石头,石头数跟这棵二叉树的节点数相同,石头只可以在子节点和父节点之间进行搬运,每次只能搬运一颗石头。请问如何以最少的步骤将石头搬运均匀,使得每个节

来源:互联网 发布:java socket传输图片 编辑:程序博客网 时间:2024/03/29 20:32

假设有一颗二叉树,已知这棵树的节点上不均匀的分布了若干石头,石头数跟这棵二叉树的

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。


1 0