题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
类似上一题
思路:利用层次遍历,但加入本层levelque和下一层nextlevel,res存放最终值
1.根节点加入levelque中
2.while leveque:针对每层创建一个nextlevel(存入左子树和右子树),curvalue存放当前层的值
3.然后将curvalue加入res中,nextlevel给level
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回二维列表[[1,2],[4,5]]
def Print(self, pRoot):
# write code here
if not pRoot:
return []
levelque=[pRoot]
res=[]
while levelque:
curvalue=[]
nextlevel=[]
for i in levelque:
curvalue.append(i.val)
if i.left:
nextlevel.append(i.left)
if i.right:
nextlevel.append(i.right)
if curvalue:
res.append(curvalue)
levelque=nextlevel
return res
层次遍历
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>> res=new ArrayList<>();
ArrayList<Integer> list=new ArrayList<>();
if(pRoot==null) return res;
Queue<TreeNode> q=new LinkedList<>();
int curcount=0;
int nextcount=1;
q.add(pRoot);
while(!q.isEmpty()){
TreeNode cur=q.poll();
curcount+=1;
list.add(cur.val);
if(cur.left!=null)q.add(cur.left);
if(cur.right!=null) q.add(cur.right);
if(curcount==nextcount){
res.add(list);
curcount=0;
nextcount=q.size();
list=new ArrayList<Integer>();
}
}
return res;
}
}