题解 | #二叉搜索树的第k个节点#
二叉搜索树的第k个节点
https://www.nowcoder.com/practice/57aa0bab91884a10b5136ca2c087f8ff
# 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):
# step1.初始条件
if not pRoot or k<=0:
return -1
queue = [pRoot]
res = []
# step2.遍历,生成从小到大排序的数组
while queue:
node: TreeNode = queue.pop(0)
res.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
res.sort(reverse=False)
# step3.条件判断,返回最终结果
return -1 if k> len(res) else res[k-1]
第一步:初始条件
1.先进行一些基本的判断,对应原题的描述2,即二叉树为空情况下返回-1,此外还添加了一个条件,确保在后面的步骤中k不为0。
2.创建一个队列,填充二叉树的各个节点
3.初始化一个空列表,用来存储结果
第二步:遍历
1.执行出队操作,我们暂且先不用关心哪个节点大,哪个节点小,尽管往结果集里添加节点值即可
2.如果节点的左右子树不为空,将左右子树添加在队列中(因为在上个步骤中整个队列里的元素都被取了出来...)
3.使用sort()函数对结果集排序,reverse=False表示从小到大排序(不设置也行,但这样更直观容易理解)
第三步:条件判断
如果 k值大于结果集的长度返回-1(对应原题的描述2)
否则返回结果集下标为k-1的元素(因为python列表的下标默认是从0开始)
