剑指Offer54. 二叉搜索树的第K大节点Golang版
1. 问题描述
给定一棵二叉搜索树,请找出其中第k大的节点。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/
1 4
2
输出: 4
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/
3 6
/
2 4
/
1
输出: 4
限制:
1 ≤ k ≤ 二叉搜索树元素个数
2. 思路
利用二叉搜索树,中序遍历为有序序列的的特点
注意:题目要求是第k大,中序遍历时应该先右子树,再左子树。
3. 代码
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func kthLargest(root *TreeNode, k int) int {
var count int
var ans int
inOrder(root, k, &count, &ans)
return ans
}
func inOrder(root *TreeNode, k int, cnt *int, ans *int) {
if root == nil {
return
}
inOrder(root.Right, k, cnt, ans)
*cnt++
if *cnt == k {
*ans = root.Val
return
}
// fmt.Println(*cnt)
inOrder(root.Left, k, cnt, ans)
}
234

被折叠的 条评论
为什么被折叠?



