类型堆栈。堆栈没有方法推送

编写堆栈包。


package stack


type Stack struct {

    data []interface{}

}


func (s *Stack) IsEmpty() bool {

    return len(s.data) == 0

}


func (s *Stack) Push(item interface{}) {

    s.data = append(s.data, item)

    //fmt.Println(s.data, item)

}


func (s *Stack) Pop() interface{} {

    if len(s.data) == 0 {

        return nil

    }

    index := len(s.data) - 1

    res := s.data[index]

    s.data = s.data[:index]

    return res

}

然后尝试调用它


package main

import (

    s "library/stack"

    t "library/tree"

)

func preorderTraversal(root *t.TreeNode) []int {

    res := make([]int, 0)

    if root == nil {

        return res

    }


    // iterative

    var stack *s.Stack

    stack.Push(root)

    // TODO: more logic

    return res

}


func main() {

    left := t.TreeNode{1, nil, nil}

    right := t.TreeNode{2, nil, nil}

    root := t.TreeNode{0, &left, &right}


    fmt.Println(preorderTraversal(&root))

}

但是我遇到了一个错误


stack.Push undefined (type *stack.Stack has no field or method Push)

这是什么问题?


编辑:添加树包只是为了方便


package tree


type TreeNode struct {

    Val   int

    Left  *TreeNode

    Right *TreeNode

}

添加了基于Cerise Limón play.golang.org/p/E4JXjc-Pd0i


慕森王
浏览 88回答 1
1回答

慕斯王

您肯定需要实例化变量,而不仅仅是创建一个指针。然后它应该工作:stacknilstack := &s.Stack{}stack.Push(root)注意:让我有点困惑的是错误消息。当我运行你的程序时,它会惊慌失措:panic: runtime error: invalid memory address or nil pointer dereference
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go