二叉搜索树中第K小的元素

给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。

输入: root = [3,1,4,null,2], k = 1
   3
  / \
 1   4
  \
   2
输出: 1


输入: root = [5,3,6,2,4,null,null,1], k = 3
       5
      / \
     3   6
    / \
   2   4
  /
 1
输出: 3

分析:

  1. 根据BST的特点,任一左子树节点值不大于根节点值,根节点值不大于右子树节点值
  2. 采用中序遍历,节点值依次递增,当遍历到第k个节点时刚好为第k小的元素
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def kthSmallest(self, root, k):
        """
        :type root: TreeNode
        :type k: int
        :rtype: int
        """
        self.count = 0
        self.ret = 0
        self.flag = True
        def dfs(node, k=k):
            if self.flag and node:
                dfs(node.left)
                self.count += 1
                if self.count == k:
                    self.ret = node.val
                    self.flag = False
                    return self.ret
                dfs(node.right)
        dfs(root, k)
        return self.ret
    原文作者:momo1023
    原文地址: https://www.jianshu.com/p/c37c37a73917
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞