题解 | #把二叉树打印成多行#
把二叉树打印成多行
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 }