(root *TreeNode, k int)
| 11 | } |
| 12 | |
| 13 | func inOrderTraverse(root *TreeNode, k int) (int, int) { |
| 14 | if root == nil { |
| 15 | return k, math.MaxInt32 |
| 16 | } |
| 17 | |
| 18 | var val int |
| 19 | k, val = inOrderTraverse(root.Left, k) |
| 20 | |
| 21 | // Stop traverse when the kth smallest number has been found |
| 22 | if val != math.MaxInt32 { |
| 23 | return k, val |
| 24 | } |
| 25 | |
| 26 | // When k becomes zero, the kth smallest number has been found |
| 27 | k-- |
| 28 | if k == 0 { |
| 29 | return k, root.Val |
| 30 | } |
| 31 | |
| 32 | return inOrderTraverse(root.Right, k) |
| 33 | } |