leetcode-102

118 阅读1分钟

题目描述:具体描述见原题。简单来说就是层次序遍历二叉树。

解题思路:层次序遍历二叉树有两种解法,广度优先遍历(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
}

补充说明:论文一审结束,即将二审,希望下周能顺利答辩。