题解 | #二叉搜索树的第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开始)

全部评论

相关推荐

点赞 评论 收藏
分享
想去夏威夷的小哥哥在度假:5和6才是重点
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务