35 lines
531 B
Go
35 lines
531 B
Go
package q230
|
|
|
|
type TreeNode struct {
|
|
Val int
|
|
Left *TreeNode
|
|
Right *TreeNode
|
|
}
|
|
|
|
func findKth(node *TreeNode, k, current int) (int, *int) {
|
|
if node == nil {
|
|
return current, nil
|
|
}
|
|
|
|
current, ret := findKth(node.Left, k, current)
|
|
if ret != nil {
|
|
return current, ret
|
|
}
|
|
|
|
current += 1
|
|
if current == k {
|
|
return current, &node.Val
|
|
}
|
|
|
|
return findKth(node.Right, k, current)
|
|
}
|
|
|
|
func kthSmallest(root *TreeNode, k int) int {
|
|
_, kth := findKth(root, k, 0)
|
|
if kth == nil {
|
|
return 0
|
|
}
|
|
return *kth
|
|
}
|
|
|
|
var _ = kthSmallest
|