day31-2022.11.27
题目信息来源
作者:Krahets
链接:https://leetcode.cn/leetbook/read/illustration-of-algorithm
来源:力扣(LeetCode)
剑指 Offer 54. 二叉搜索树的第 k 大节点
给定一棵二叉搜索树,请找出其中第 k
大的节点的值。
输入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
输出: 4
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/ \
3 6
/ \
2 4
/
1
输出: 4
题解:个人解法
偷懒法,遍历整个二叉搜索树,将节点保留在 myList
里面,遍历方式:中序遍历,右-中-左。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def kthLargest(self, root: TreeNode, k: int) -> int:
def searchTree(node):
if node.right:searchTree(node.right)
mylist.append(node)
if node.left:searchTree(node.left)
return
mylist = []
searchTree(root)
return mylist[k-1].val
题解:个人解法
中序遍历:右-中-左,找到第 k 大的值就返回,并且不用列表存储。和官方题解基本一样。
class Solution:
def kthLargest(self, root: TreeNode, k: int) -> int:
if not root:return
def searchTree(node):
if node.right:searchTree(node.right)
if self.num==k:return
if not self.num:self.num = 1
else:self.num = self.num + 1
self.tmpNode = node
if node.left:searchTree(node.left)
return
self.tmpNode = None
self.num = None
searchTree(root)
return self.tmpNode.val