剑指 Offer 54. 二叉搜索树的第k大节点




方法一:BFS模板的应用。

总结的DFS、BFS模板参考:https://www.cnblogs.com/panweiwei/p/13065661.html

class Solution(object):
    # BFS
    def kthLargest(self, root, k):
        """
        :type root: TreeNode
        :type k: int
        :rtype: int
        """
        if not root:
            return
        res = []
        stack = [root]
        while stack:
            sizestack = len(stack)
            for i in range(sizestack):
                node = stack.pop(0)
                res.append(node.val)
                if node.left:
                    stack.append(node.left)
                if node.right:
                    stack.append(node.right)
        # 要返回的是第k大,所以降序排;若是第k小,则升序排
        res.sort(reverse=True)
        return res[k - 1]


方法二:DFS,二叉搜索树的中序遍历就是有序序列。

class Solution(object):
    # DFS:二叉搜索树的中序遍历就是有序序列。
    def kthLargest(self, root, k):
        """
        :type root: TreeNode
        :type k: int
        :rtype: int
        """
        if not root:
            return
        res = self.mid_DFS(root)
        return res[len(res) - k]

    def mid_DFS(self, root):
        # 特判:树根为空
        if not root:
            return []
        # 返回值
        res = []
        res += self.mid_DFS(root.left)
        res.append(root.val)
        res += self.mid_DFS(root.right)
        return res
posted @ 2020-09-13 16:13  人间烟火地三鲜  阅读(107)  评论(0编辑  收藏  举报