问题描述
- 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
- 说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
输出: 1
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/ \
3 6
/ \
2 4
/
1
输出: 3
问题分析
寻找第k小的元素,即现将所有元素用中序遍历排序后输出下标第k-1个元素
后来又发现;列表是没有必要的
代码
#用列表中转中序遍历
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
node_list=[]
def inorder(self,head):
if head==None:
return
self.inorder(head.left)
self.node_list.append(head.val)
self.inorder(head.right)
def kthSmallest(self, root: TreeNode, k: int) -> int:
self.node_list=[]
self.inorder(root)
return self.node_list[k-1]
#改进版本
class Solution(object):
def kthSmallest(self, root, k):
self.count=k
self.res=0
def core(root):
if root :
core(root.left)
self.count=self.count-1
if self.count==0:
self.res=root.val
core(root.right)
core(root)
return self.res