题目:
- 给定一棵二叉搜索树,请找出其中的第k小的结点。
- 例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
思路:
- 二叉搜索树 的中序遍历,就是排序好的一个数组
- 所以:只需要输出中序遍历的第K个数,也就是要找的第K小的结点
例子:
以题目中给的例子来看: (5,3,7,2,4,6,8),其二叉搜索树如下,左子树元素小于右子树元素
他的中序遍历是: [2,3,4,5,6,7,8]排好序的
# -*- 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):
# write code here
# 二叉搜索树:按照中序遍历的话,元素是有序的;
# 所以找出中序遍历的第K个值,就是第K小的数;
ret = [] # 定义结果列表
def preOrder(pRoot): # 中序遍历
if pRoot == None:
return None
preOrder(pRoot.left)
ret.append(pRoot)
preOrder(pRoot.right)
preOrder(pRoot) # 执行中序遍历
if len(ret) < k or k < 1: # 若树的长度小于K或者K小于1,不满足题意:返回None
return None
return ret[k-1]