头脑风暴:二叉搜索树中的众数
题目
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。
假定 BST 有如下定义:
结点左子树中所含结点的值小于等于当前结点的值结点右子树中所含结点的值大于等于当前结点的值左子树和右子树都是二叉搜索树
例如:
给定 BST [1,null,2,2],
复制代码
返回[2].
解题思路
根据题意,我们一定能想到一个最朴素的做法,由于本题给出的是一棵二叉搜索树,所以我们首先想到的就是利用中序排序,可以得到一个有序的数组,既然要求这个有序数组中出现频率最高的值,我们可以用以下思路来解答:
通过中序遍历,将二叉搜索树转换到一个有序数组中;
利用哈希表,遍历该有序数组,求得每个值出现的次数;
遍历该哈希表,然后得出出现频率最高的值;
代码实现
复制代码
最后
复杂度分析:
时间复杂度:O(n)。即遍历这棵树的复杂度。
空间复杂度:O(n)。即递归的栈空间的空间代价加上哈希表的空间。
版权声明: 本文为 InfoQ 作者【HelloWorld杰少】的原创文章。
原文链接:【http://xie.infoq.cn/article/44fe4562510ad503da9ba3ce7】。文章转载请联系作者。
评论