题解 | #二叉搜索树的第k个结点# golang

二叉搜索树的第k个结点

http://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a

func KthNode( pRoot *TreeNode ,  k int ) *TreeNode {
    // write code here
    if pRoot == nil || k <= 0 {
        return nil
    }
    stack := NewStack()
    cul := pRoot

    for !stack.IsEmpty() || cul != nil {
        if cul != nil {
            stack.Push(cul)
            cul = cul.Left
        } else {
            cul = stack.Pop()
            k--
            if k==0 {
                return cul
            }
            cul = cul.Right
        }

    }
    return nil
}

type Stack struct {
    Val []*TreeNode
    Top int
}

func NewStack() *Stack {
    return &Stack{Val:make([]*TreeNode,0),Top: 0}
}

func (s *Stack) Push(v *TreeNode) {
    s.Top++
    s.Val = append(s.Val, v)
}

func (s *Stack) Pop() *TreeNode {
    if s.Top==0 {
        return nil
    }

    v:=s.Val[s.Top-1]
    s.Val = s.Val[:s.Top-1]
    s.Top--
    return v
}

func (s *Stack) IsEmpty() bool {
    if s.Top == 0 {
        return true
    }
    return false
}
全部评论

相关推荐

04-18 15:58
已编辑
门头沟学院 设计
kaoyu:这一看就不是计算机的,怎么还有个排斥洗碗?
点赞 评论 收藏
分享
05-12 16:04
已编辑
江西财经大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务