题解 | #求二叉树的层序遍历#

求二叉树的层序遍历

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
}

#为什么直播平台的打赏都是虚拟币#
全部评论

相关推荐

03-30 19:30
石家庄学院 Java
野蛮的柯基在游泳:都能入股了,还得是Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务