题解 | #把二叉树打印成多行#
把二叉树打印成多行
https://www.nowcoder.com/practice/445c44d982d04483b04a54f298796288
package main
import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return int整型二维数组
*/
//step 1:如果树为空,则返回空数组,没有任何打印结果。
//step 2:使用队列辅助层次遍历,优先加入二叉树的根节点。
//step 3:从根节点开始,每次进入一层的时候,记录队列的长度即本层的节点数,然后访问相应节点数全在同一个数组中,子节点加入队列中继续排队。
//step 4:每次访问完一层将数组加入二维数组中再进入下一层。
func Print(pRoot *TreeNode) [][]int {
if pRoot == nil {
return [][]int{}
}
var ans [][]int
// 队列存储
var queue []*TreeNode
queue = append(queue, pRoot)
for len(queue) != 0 {
size := len(queue) // 记录本层的节点个数
var tmp []int
// 本层节点有几个就循环几次,循环结束,本层节点都加入了 tmp 数组
for i := 0; i <= size-1; i++ {
cur := queue[0]
tmp = append(tmp, cur.Val)
//弹出当前节点,并把当前节点的下一层左右子树加入队列
queue = queue[1:]
if cur.Left != nil {
queue = append(queue, cur.Left)
}
if cur.Right != nil {
queue = append(queue, cur.Right)
}
}
//程序走到这里,说明本层节点已经全部获取到
ans = append(ans, tmp)
}
return ans
}
查看11道真题和解析