题目
描述
给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。
1.返回第k小的节点值即可
2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1
3.保证n个节点的值不一样
数据范围: 0≤n≤1000,0≤k≤1000,树上每个结点的值满足0≤val≤1000
进阶:空间复杂度 O(n),时间复杂度 O(n)
思路
先序遍历,然后存储节点值,然后排序,然后判断index是否有越界,没有越界的话返回对应位置的值,有越界返回-1.
代码
python版本:
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param proot TreeNode类
# @param k int整型
# @return int整型
#
class Solution:
def KthNode(self , proot: TreeNode, k: int) -> int:
# write code here
if proot==None:
return -1
nodes_val = []
def preorder(proot: TreeNode):
nonlocal nodes_val
if proot==None:
return
nodes_val.append(proot.val)
preorder(proot.left)
preorder(proot.right)
preorder(proot)
nodes_val.sort()
if(k-1<0 or k>len(nodes_val)):
res = -1
else:
res = nodes_val[k-1]
return res
c++版本:
无