二叉搜索树的第k个结点
题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
解题思路
将问题转化为二叉搜索树的中序遍历问题,(5,3,7,2,4,6,8) 的中序遍历形式为(2, 3, 4, 5, 6, 7, 8),中序遍历的第k个值便是第k个节点,详解和参考答案在这里。
更新方法:
# 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) -> int:
# write code here
if not proot or not k:
return -1
results = self.midTravel(proot, [])
if len(results) < k:
return -1
return results[k-1]
def midTravel(self, proot, res=[]):
if proot.left:
self.midTravel(proot.left, res)
res.append(proot.val)
if proot.right:
self.midTravel(proot.right, res)
return res
原来方法:
# -*- 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
if not pRoot or not k:
return
res = []
global res
self.midtravel(pRoot, k)
if len(res) < k:
return
return res[k-1]
def midtravel(self, pRoot, k):
if not pRoot or len(res)>=k:
return
self.midtravel(pRoot.left, k)
res.append(pRoot)
self.midtravel(pRoot.right, k)