Z62 二叉搜索樹的第k個結點

二叉搜索樹的第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
}  

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章