题解 | #求二叉树的层序遍历#
求二叉树的层序遍历
https://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3
package main
import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
*
* @param root TreeNode类
* @return int整型二维数组
*/
type Queue interface {
Enqueue(node *TreeNode) bool
Dequeue() *TreeNode
IsEmpty() bool
Size() int
}
type queue struct {
datas []*TreeNode
n int
head int
tail int
}
func NewQueue(capacity int) Queue {
return &queue{
datas: make([]*TreeNode, capacity),
n: capacity,
}
}
func (q *queue) Enqueue(node *TreeNode) bool {
if q.tail == q.n {
return false
}
q.datas[q.tail] = node
q.tail++
return true
}
func (q *queue) Dequeue() *TreeNode {
if q.IsEmpty() {
return nil
}
node := q.datas[q.head]
q.head++
return node
}
func (q *queue) IsEmpty() bool {
return q.head == q.tail
}
func (q *queue) Size() int {
return q.tail - q.head
}
func levelOrder(root *TreeNode) [][]int {
// write code here
if root ==nil{
return [][]int{}
}
queue := NewQueue(100000)
queue.Enqueue(root)
records := make([][]int, 0)
for !queue.IsEmpty() {
size := queue.Size() //记录当前层多少个数
record := make([]int, size)
for i := 0; i < size; i++ {
node := queue.Dequeue() //弹出当前层的数据
record[i] = node.Val
//压入下一层的数据
if node.Left != nil {
queue.Enqueue(node.Left)
}
if node.Right != nil {
queue.Enqueue(node.Right)
}
}
records = append(records, record)
}
return records
}
#为什么直播平台的打赏都是虚拟币#
