二叉搜索树的第k个结点
题目:给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。
思路:
二叉搜索树的中序遍历是递增的序列,使用循环的中序遍历找到第k个节点就行了。
func KthNode(pRoot *TreeNode, k int) *TreeNode { if pRoot == nil { return nil } var s []*TreeNode p := pRoot cnt := 0 for len(s) != 0 || p != nil { for p != nil { s = append(s, p) p = p.Left } if len(s) != 0 { p = s[len(s)-1] s = s[:len(s)-1] cnt++ if cnt == k { return p } p = p.Right } } return nil }