230. 二叉搜索树中第K小的元素 中等
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
示例 1:
输入:root = [3,1,4,null,2], k = 1
输出:1
示例 2:
输入:root = [5,3,6,2,4,null,null,1], k = 3
输出:3
提示:
- 树中的节点数为 n 。
- 1 <= k <= n <= 104
- 0 <= Node.val <= 104
代码参考:
package main
import "fmt"
func main() {
root := &TreeNode{Val: 3}
root.Left = &TreeNode{Val: 1}
root.Left.Right = &TreeNode{Val: 2}
root.Right = &TreeNode{Val: 4}
// 3
// / \
// 1 4
// \
// 2
fmt.Println(kthSmallest(root, 1)) // 1
}
// 显然是中序遍历的 stack 迭代遍历,计数取值
func kthSmallest(root *TreeNode, k int) int {
if k == 0 || root == nil {
return -1
}
var counter int
var stack []*TreeNode
cur := root
for len(stack) > 0 || cur != nil {
if cur != nil {
stack = append(stack, cur)
cur = cur.Left
continue
}
// 现在左子节点为空 // bingo
parent := stack[len(stack)-1]
stack = stack[:len(stack)-1] // pop
counter++
if counter == k {
return parent.Val
}
cur = parent.Right
}
return -1
}
最后编辑: kuteng 文档更新时间: 2021-06-05 10:16 作者:kuteng