题目概述
- 算法说明
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 - 测试用例
输入:
{8,6,10,5,7,9,11}
返回值:
[[8],[6,10],[5,7,9,11]]
解析&参考答案
- 解析
使用一个数组存放一层节点,没遍历一层就会追加上下一层节点,依次遍历完即可。 - 参考答案
vim jz60.go
package main
import "fmt"
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func Print(pRoot *TreeNode) [][]int {
if pRoot == nil {
return [][]int{}
}
var result [][]int
lineOne := []*TreeNode{pRoot}
length := len(lineOne)
for length > 0 {
var row []int
for i := 0; i < length; i++ {
row = append(row, lineOne[0].Val)
if lineOne[0].Left != nil {
lineOne = append(lineOne, lineOne[0].Left)
}
if lineOne[0].Right != nil {
lineOne = append(lineOne, lineOne[0].Right)
}
lineOne = lineOne[1:]
}
result = append(result, row)
length = len(lineOne)
}
return result
}
func main() {
root := &TreeNode{8, &TreeNode{6, &TreeNode{5, nil, nil}, &TreeNode{7, nil, nil}},
&TreeNode{10, &TreeNode{9, nil, nil}, &TreeNode{11, nil, nil}}}
result := Print(root)
for _, v := range result {
fmt.Println(v)
}
}
注意事项
- to add
说明
- 当前使用 go1.15.8
- 参考 牛客网--剑指offer
标题中jzn(n为具体数字)代表牛客网剑指offer系列第n号题目,例如 jz01 代表牛客网剑指offer中01号题目。
注意!!!
- 笔者最近在学习 golang,因此趁机通过数据结构和算法来进一步熟悉下go语言
- 当前算法主要来源于剑指 offer,后续会进一步补充 LeetCode 上重要算法,以及一些经典算法
- 此处答案仅为参考,不一定是最优解,欢迎感兴趣的读者在评论区提供更优解