描述
给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。
有点像JZ14 链表中倒数最后k个结点,第k小的结点,那就是按照结点值从小到大的顺序排列后,第k位的结点。按照树的遍历,中序遍历满足这个顺序。
题解中有一个很清晰的思路:
其实就是中序遍历,然后返回第k个值,但前提是要对k进行判定,如果k小于0或者k超出树结点的范围就返回None。
另外需要注意的是返回的是结点不是结点的值,所以在中序遍历中都是append(root),而不是root.val。
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回对应节点TreeNode
def KthNode(self, pRoot, k):
self.res=[]
self.dfs(pRoot)
return self.res[k-1] if 0<k<=len(self.res) else None
def dfs(self,root):
if not root:return
self.dfs(root.left)
self.res.append(root)
self.dfs(root.right)