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