把二叉树打印成多行(Java实现)

来源:互联网 发布:华道数据打我电话干嘛 编辑:程序博客网 时间:2024/05/16 00:46

本题为剑指offer面试题60

牛客网测试地址:https://www.nowcoder.com/questionTerminal/445c44d982d04483b04a54f298796288

  • 热度指数:29586时间限制:1秒空间限制:32768K
  •  算法知识视频讲解
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。


Java code:


package go.jacob.day611;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;public class Demo1 {ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();if(pRoot==null)return result;//result返回结果//queue队列用来层序遍历二叉树Queue<TreeNode> queue=new LinkedList<TreeNode>();queue.add(pRoot);//记录每一行的最后一个节点TreeNode lastNodeOfThisLine=pRoot;//当前遍历的节点TreeNode temp=null;//记录队列中最后一个节点TreeNode lastNode=null;//记录每一行的节点ArrayList<Integer> line=new ArrayList<Integer>();while(!queue.isEmpty()){temp=queue.remove();if(temp.left!=null){queue.add(temp.left);lastNode=temp.left;} if(temp.right!=null){queue.add(temp.right);lastNode=temp.right;}line.add(temp.val);if(temp==lastNodeOfThisLine){result.add(line);//如果当前行的最后节点为树的最后节点,跳出循环if(lastNode==lastNodeOfThisLine)break;//获取队列的最尾元素lastNodeOfThisLine=lastNode;line=new ArrayList<Integer>();}}return result;}class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}}}