一个关于二叉树最大化的问题

hmucheng 2006-07-30 10:27:58
在一个二叉树中每一个节点下有若干节点,左右节点数量出现一比一情况时x=60,左右节点出现一比二时x=90 。请问如何才能使x值最大化呢。谢谢!!!
...全文
211 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Knight94 2006-07-31
  • 打赏
  • 举报
回复
to 但最小值我决定是应该把大的一方拿出一与小的一方的2进行消除,这样剩余的才是最多的,您觉得呢

你的方法是正确的,即消除一个分支的点,另一个分支用的分支数最小,从而形成最小值。
hmucheng 2006-07-31
  • 打赏
  • 举报
回复
TO:Knight94(愚翁)

晕了,刚才看错了。在最大值上我们的思路是一样的。我的合并同类项后和你的一样。
但最小值我决定是应该把大的一方拿出一与小的一方的2进行消除,这样剩余的才是最多的,您觉得呢。比如A=100,B=150,B拿出50与A的100抵消。这样得到X=50×90=4500。A无剩余,B剩余100。而您的x的最小值为较小数的2倍乘以30 确等于6000。
hmucheng 2006-07-31
  • 打赏
  • 举报
回复
TO:Knight94(愚翁)
我现在的思路也是最大值就是可以尽量将所以点位都消除,最新的就是能消除尽量少的点位,但在您给我的答案中,您可能仅仅考虑了A和B是1:2的关系,在现实中,A和B的点位数可以是任意的数字。
hmucheng 2006-07-31
  • 打赏
  • 举报
回复
今天上午我突然发现有一个解决的办法,不知道是否合理。出现最大值和最小值的的情况是A和B节点数大于2的时候,当A=B的时候,最大值就是完全按照1:1的比例,左右两边没有剩余节点
当A>=2B的 时候A全部和两倍的进行消除,得到A倍的1:2,A没有任何节点,B节点数为B-2A。现在最关建的地方就是2B<A<B 这种情况了。只要在这样的情况下才会出现很多变化。首先最大值的情况(B-A)*90 +(A-(B-A))*60 ,在这样的情况下A和B两边没有剩余点位,也就是可以得到最大值。最小值也就是用B和A按照一比二的比例进行消除,这样就会使大的越大,小的越小,得到最小值。
Knight94 2006-07-31
  • 打赏
  • 举报
回复
to 如果左边100,右边150 。如果我全部选择1:1结合则左边0,右边剩余50。100×60=6000。和上门我举得例子就不一样了

如果可以有剩余的话,算法就不一样了。

1、算出左右两个分支的节点个数;

最大值:尽可能消融最多的点。
2、看看两个数中较大数是否小于等于较小数的2倍,如果是的话,可以消融所有点,x的值为两数之和乘以30;否则,x的值为较小数的3倍乘以30。

最小值:尽可能消融最少的点。
2、x的最小值为较小数的2倍乘以30。
hmucheng 2006-07-31
  • 打赏
  • 举报
回复
X是不可能唯一的,我们可以首先选择进行一比一结合,或者选择一比二结合,选择不同的结合方式。得到的X值就是不同的 如果左边100,右边150 。如果我全部选择1:1结合则左边0,右边剩余50。100×60=6000。和上门我举得例子就不一样了
chenminsc 2006-07-31
  • 打赏
  • 举报
回复
照你举的例子,不可能会有最大值和最小值的,给定了左右节边,X的值只有一个
hmucheng 2006-07-31
  • 打赏
  • 举报
回复
举例说,比如左边100个节点,右边150个节点,在这样的情况下,左边先拿出50个节点和右边100个节点结合,得到X=4500。然后左边剩余50个,右边剩余50个。双方在都拿出50个即50*60=3000 。x=4500+3000=7500。这样左右两个就都没有剩余节点,得到最大值。最小值也按照这样的方法推算。有没有固定的算法可以得到最大值和最小值的结果呢??
hmucheng 2006-07-31
  • 打赏
  • 举报
回复
但左右两个数字是不同的,虽然每一个点是30。但怎么能判断出该从那边扣除2从那边扣除1或都扣除1才能得到最大值和最小值呢。有没有固定的算法可以得到最大值和最小值并能统计出两边剩余的点位数呢
Knight94 2006-07-30
  • 打赏
  • 举报
回复
如果这样的话,要完全消融左右节点的话,那么算法是固定的,分别求出左右节点的个数。

当个数给出,那么相应的x值也就是固定了。

因为对于1:1来说是消掉成对两个点,每个点的值为30,
对于1:2来说同时消掉三个点,每个点的值也为30。

也就是说,不管怎么进行消除来说,x的值是随着节点个数变化,与怎么消融无关。
hmucheng 2006-07-30
  • 打赏
  • 举报
回复
其实也就是给出任意两个数字,按照1:1=60 ,1:2=90 这两个比例抵消,如何得到最大值和最小值。
hmucheng 2006-07-30
  • 打赏
  • 举报
回复
举例说明,如果某个节点是A ,其左右节点是B,C b 和 c下可以有任意节点,比如b有100个节点,c有150个节点。这样就会出现n个一比一的情况和m个一比二的 情况。X 就是一个变量,记录得到的最大值或最小值。比如首先进行一比二。B节点拿出50个节点与C的100个节点进行抵消,出现一个一比二是90 50个就是4500 。抵消后B剩余50个,c剩余50个。在各拿出50个节点,出现一个1:1的时候是60。50个就是3000 。这样两个相加就是7500 ,。赋值给X。B和C节点数为零 。只要求得X的最大值和最小值。
smartstar2005 2006-07-30
  • 打赏
  • 举报
回复
不明白是什么意思

顶一下
Knight94 2006-07-30
  • 打赏
  • 举报
回复
或者说代表什么
Knight94 2006-07-30
  • 打赏
  • 举报
回复
x的意义是什么
hmucheng 2006-07-30
  • 打赏
  • 举报
回复
忘记了,是求 x的最大值和最小值
hmucheng 2006-07-30
  • 打赏
  • 举报
回复
没人能帮一下吗

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧