题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4
思路:二叉搜索树的中序遍历按从小到大的顺序,树的形状不能确定,但节点大小顺序可以确定
# -*- coding:utf-8 -*-
clas TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def KthNode(self, pRoot, k): # 返回节点,而不是节点的值
self.res = []
self.inorder(pRoot)
return self.res[k - 1] if 0 < k <= len(self.res) else None
def inorder(self, pRoot): # 二叉搜索树的中序遍历就是按从小到大的顺序,因为二叉搜索树的左子节点的值小于根节点,右子节点的值大于根节点,子树也是这个规律,最左的子树的左子节点值最小,根节点第二小,右子节点第3小
if not pRoot:
return None
self.inorder(pRoot.left)
self.res.append(pRoot)
self.inorder(pRoot.right)