题目描述:具体描述见原题。简单来说就是层次序遍历二叉树。
解题思路:层次序遍历二叉树有两种解法,广度优先遍历(BFS),深度优先遍历(DFS),为了突出层次,所以选择BFS,BFS更能直观体现遍历过程。具体过程见代码。
具体代码:
func levelOrder(root *TreeNode) [][]int {
res := make([][]int, 0)
if root == nil {
return res
}
temp, next, queue, current := make([]int, 0), 0, make([]*TreeNode, 0), 1 // 广度优先遍历当然要使用队列了。current代表当前层节点个数,next代表当前层下一层节点个数。temp为记录当前层节点的数组。
queue = append(queue, root) // 初始化队列,将根节点入队
for len(queue) != 0 {
for current != 0 {
node := queue[0]
if node.Left != nil { // 队列是先进先出,所以先判断左子树
queue = append(queue, node.Left)
next++
}
if node.Right != nil {
queue = append(queue, node.Right)
next++
}
temp = append(temp, node.Val) // 当前节点值入数组
queue = queue[1:] // 访问过的的节点出队列
current--
}
res = append(res, temp)
current = next // 当前层所有节点访问完毕后,初始化相关数据
next = 0
temp = make([]int, 0)
}
return res
}
补充说明:论文一审结束,即将二审,希望下周能顺利答辩。