给定一棵二叉搜索树,请找出其中第k大的节点。
例如, (5,3,7,2,4,6,8)中,按结点数值大小顺序第三小节点的值为4。
1 | 5 |
方法一:小根堆
思路:首先,按照任意一种遍历顺序,对二叉搜索树进行遍历。遍历的同时,将节点依次加入小根堆中。
然后,循环删除堆中的元素,直到元素个数等于k为止。
最后,堆中的根节点即为第k大的节点。
1 | /** |
复杂度分析:时间复杂度和空间复杂度均为O(n)。
方法二:递归
思路:二叉搜索树的中序遍历序列是递增排列的。
因此,按照中序遍历的逆顺序对二叉树搜索树进行遍历,遍历的第k个节点就是第k大的节点。
1 | /** |
复杂度分析:时间复杂度和空间复杂度均为O(k)。
方法三:迭代
1 | /** |
复杂度分析:时间复杂度和空间复杂度均为O(k)。