Maximum Binary Tree - 最大二叉树
问题
拥有个节点的二叉树,节点范围为,节点的权值为正整数,整个二叉树的权值为所有节点的权值之和。现在要求只保留个节点(),剪裁掉的节点数量为,要求剩余部分仍然是一个二叉树,而不能是多个二叉树。如图:
正确剪裁
错误剪裁
对于拥有个节点的二叉树,求出保留个节点的二叉树的最大权值。
解法
设表示以节点为根节点的树上,保留个节点(包括节点自己)的最大权值。因此有转移方程如:
节点数量为的二叉树,其最大权值即为节点自己的权值,因此;
对于根节点为的二叉树,只留个节点。当左子树上有个节点(),则右子树上有个节点,因为左右子树的节点数量之和为(根节点占一个节点)。设其左右孩子节点为和,左子树的最大权值为,右子树的最大权值为,根节点的子树的最大权值为。遍历,在所有可能中选取使最大的即可;
即为该二叉树留下个节点时的最大权值。该算法的时间复杂度是。