这边借助两个数据结构实现,HashMap 记录每个节点层 Queue 进行层序遍历
最后返回即可
import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer> > result=new ArrayList<ArrayList<Integer> >(); if(pRoot==null){ return result; } //广度优先遍历,很简单的层序遍历,队列 Queue<TreeNode> queue=new LinkedList<>(); ArrayList<Integer> item=new ArrayList<Integer>(); result.add(item); queue.add(pRoot); //记录当前层 int level=1; HashMap<TreeNode,Integer> map=new HashMap<>(); //记录节点层 map.put(pRoot,1); while(!queue.isEmpty()){ TreeNode node=queue.poll(); int curLevel=map.get(node); if(curLevel!=level){ //下一层 item=new ArrayList<>(); result.add(item); level=curLevel; } item.add(node.val); if(node.left!=null){ map.put(node.left,curLevel+1); queue.add(node.left); } if(node.right!=null){ map.put(node.right,curLevel+1); queue.add(node.right); } } return result; } }