type TreeNode struct{
Val int
Left *TreeNode
Right *TreeNode
}funclevelOrder(root *TreeNode)[]int{var result []int
tmpList :=list.New()// 先将根节点放进去
tmpList.PushFront(root)for tmpList.Len()!=0{
tmpDataInterface :=tmpList.Back()
tmpList.Remove(tmpDataInterface)
nodeData :=tmpDataInterface.Value.(*TreeNode)// 出栈的顺序就是遍历的顺序,因此在出栈的时候将其放到数组中
result =append(result,nodeData.Val)if nodeData.Left!=nil{
tmpList.PushFront(nodeData.Left)}if nodeData.Right!=nil{
tmpList.PushFront(nodeData.Right)}}return result
}
解题思路【深度优先】
var result [][]intfunclevelOrder(root *TreeNode)[][]int{
result =make([][]int,0)_levelOrder(root,0)return result
}// 注意:在先序/中序、遍历的时候这里将返回值放到参数参数中,传递的是一个指针,而在这里是一个二维不可以// 错误的示范: func _levelOrder(root *TreeNode, level int,result *[][]int) { 这个地方也没太能理解,还得加强理解func_levelOrder(root *TreeNode, level int){if root ==nil{return}// 这里有go语言的特性,怎么进行初始化,否则会index out of range ,这里非常重要,怎么进行判断对二维的数组在一维的时候进行初始化// 在最开始的时候也没能想出来,在看到答案的时候结合递归的深度优先遍历来理解的if level ==len(result){
result =append(result,[]int{})}
result[level]=append(result[level], root.Val)if root.Left !=nil{_levelOrder(root.Left, level+1)}if root.Right !=nil{_levelOrder(root.Right, level+1)}}