Talk is cheap.
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func kthNode(root *TreeNode, k int) *TreeNode {
var stack []*TreeNode
cnt := 0
node := root
for len(stack) != 0 || root != nil {
for root != nil {
stack = append(stack, root)
root = root.Left
}
node, stack = stack[len(stack)-1], stack[:len(stack)-1]
cnt += 1
if cnt == k { return node }
root = node.Right
}
return nil
}