题目
给定一棵二叉搜索树,请找出其中第k大的节点。
限制
1 ≤ k ≤ 二叉搜索树元素个数
思路
二叉搜索树中序遍历是递增的顺序
方案一
1.将二叉搜索树的值经过中序遍历保存到数组中
2.保存到数组中的值是递增的,通过索引获取制定值
代码
// kthLargest
// @desc 剑指 Offer 54. 二叉搜索树的第k大节点
func kthLargest(root *TreeNode, k int) int {
data := []int{}
var inorder func(root *TreeNode)
inorder = func(root *TreeNode){
if root == nil{
return
}
inorder(root.Left)
data = append(data, root.Val)
inorder(root.Right)
}
inorder(root)
return data[len(data)-k]
}
方案二
1.中序遍历倒序方式即是递减的序列,直接递归k次即可
原理
中序遍历:左中右
中序遍历的倒序:右中左
代码
// kthLargest
// @desc 剑指 Offer 54. 二叉搜索树的第k大节点
func kthLargest(root *TreeNode, k int) int {
var rs int
var inorder func(root *TreeNode)
inorder = func(root *TreeNode){
if root == nil{
return
}
inorder(root.Right)
k--
if k==0 {
rs = root.Val
return
}
inorder(root.Left)
}
inorder(root)
return rs
}
参考
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/er…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。