最近在leetcode用golang刷题的时候发现golang闭包的一个坑。
原题:给你二叉树的根节点 root
,返回其节点值的 层序遍历。
我琢磨着能否用递归的方式解决,于是有了以下代码:
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
//主方法
func levelOrder(root *TreeNode) [][]int {
var arr = [][]int{}
traverse(root, 0, arr)
return arr
}
//递归方法
func traverse(node *TreeNode, level int, arr [][]int) {
if len(arr) < level+1 {
arr = append(arr, []int{})
}
if node == nil {
return
} else {
arr[level] = append(arr[level], node.Val)
}
traverse(node.Left, level+1, arr)
traverse(node.Right, level+1, arr)
}
//初始化Tree
func initTree() *TreeNode {
node5 := TreeNode{
Val: 7,
}
node4 := TreeNode{
Val: 3,
}
node3 := TreeNode{
Val: 6,
Left: &node4,
Right: &node5,
}
node2 := TreeNode{
Val: 4,
}
node1 := TreeNode{
Val: 5,
Left: &node2,
Right: &am