题目:给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
思路一:递归法。
代码:
public List<List<Integer>> result=new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
recurrentOrder(root,0);
return result;
}
public void recurrentOrder(TreeNode node,Integer deep){
if(node==null) return;
deep++;//记录层级
if(result.size()<deep){
List<Integer> level=new ArrayList<>();//记录一层中的节点
result.add(level);
}
result.get(deep-1).add(node.val);
recurrentOrder(node.left,deep);
recurrentOrder(node.right,deep);
}
思路二:迭代法。使用队列(先进先出)遍历树,队列中存储的节点是一层中的所有节点。初始入队节点root,出队,若左孩子,右孩子不为空,则入队它的左孩子,右孩子。
代码:
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result=new ArrayList<>();
if(root==null)
return result;
Queue<TreeNode> queue=new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
List<Integer> level=new ArrayList<>();//记录一层的节点
int size=queue.size();//这一层的节点个数
while(size>0){
TreeNode node=queue.poll();
level.add(node.val);
if(node.left!=null) queue.offer(node.left);
if(node.right!=null) queue.offer(node.right);
size--;
}
result.add(level);//将这一层的列表加入结果集
}
return result;
}