题解 | #二叉搜索树的第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
}
全部评论

相关推荐

在打卡的大老虎很想潜...:你在找实习,没啥实习经历,技术栈放前面,项目多就分两页写,太紧凑了,项目你最多写两个,讲清楚就行,项目背景。用到的技术栈、亮点、难点如何解决,人工智能进面太难了,需求少。你可以加最新大模型的东西
点赞 评论 收藏
分享
鱼专:别投了,我看到有人点了第二个链接投递,还没退出界面,不合适的邮件就发过来了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务