2018-12-05

今天考研的同学让我帮她看一道数据结构问题,题目是这样的:

由23、12、45、36构成的二叉排序树有几个() ,其中AVL树又有几个()?
A. 13, 4;
B. 13, 5;
C. 14, 5;
D. 14, 4;
答案: D

看到这题的第一反应是,首先将序列排序为 :12、23、36、45,然后用枚举法。
当然答案也是这么给的。

有 种情况, 枚举的时候发现12 和 45 开头的AVL树不可能存在,因此只要枚举23 和 36 开头的情况,排除相同的树即可。枚举完发现分别有2个AVL树,因此第二个空为4。

但是仔细想想,二叉树是可以反转的。也就是说,其实12 开头(最小值)的树,将树的左右子树交换一下,她的结构就和45开头(最大值)的树一模一样!对于23 和 36 开头的树也是如此(因为对于23来说,有1个数比他小,2个数比他大;对于36来说,有1个树比它大,有2个数比他小。对于树的结构来说,就会是左右子树交换的问题了)!因此对于一个偶数序列,答案必定两个空都为偶数

因此只要给出2k位(哪怕有1000000个数)的偶数序列,只要他出答案方式不变,则不用不用不用任何计算、画图、枚举!!!直接选两个数都为偶数的答案!!!! 就算出答案方式改变,那也可以少计算一半!!!!!!!

若给出2k+1奇数序列,则只需计算最中间那个树的方案即可。

这题最难的还可以这么出:

给你 2k+1 个数,构成的二叉排序树有___个 ,其中AVL树又有 ___个?

来,大家一起来填空!有了上面的思路,我相信再递归递归,找找规律这题就有解了。只要有高中扎实的数学功底,以及对二叉树本质的了解,这题一定能作对!

你可能感兴趣的:(2018-12-05)