牛客网上的剑指 offer的在线编程:
题目描述
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
# -*- coding:utf-8 -*-
'''
二叉搜索树的第k个节点
题目描述
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,
按结点数值大小顺序第三个结点的值为4。
'''
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 k == 0:
return None
res = self.sub_tree(pRoot)
if len(res) < k:
return None
else:
return res[k - 1]
def sub_tree(self, root):
res = []
if not root:
return None
if root.left:
res.extend(self.sub_tree(root.left))
res.append(root)
if root.right:
res.extend(self.sub_tree(root.right))
return res