题目描述如下:
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
/**
*怎么实现一层层遍历,集合里怎么来存放限制一层层,一次循环完就放进去,一层就遍历完事;
应该是队列循环一次存放一个集合里,一次循环完了,在把下一层数据放入队列
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
//如果为空,返回空集
if(root==null) {
return new ArrayList<>();
}
//binaryTreelevel(root);
//嵌入集合
List<List<Integer>> list = new ArrayList<>();
//定义队列集合
Queue<TreeNode> queue = new LinkedList<>();
//添加根结点
queue.add(root);
while(!queue.isEmpty()) {
//定义内层集合,循环一次存一层
List<Integer> listTree = new ArrayList<>();
//定义这个一层的长度
int count =queue.size();
//这控制层数。第一层一个结点,二层两个结点,三层四个结点,指数形式
for(int i=0;i<count;i++){
//把这层值放入队列
TreeNode pNode = queue.poll();
//放入集合
listTree.add(pNode.val);
//左右判断
if(pNode.left !=null){
queue.add(pNode.left);
}
if(pNode.right !=null){
queue.add(pNode.right);
}
}
list.add(listTree);
}
System.out.print(list);
return list;
}
// public void binaryTreelevel(TreeNode root) {
// }
}
估计别人的方法更好,我的时间复杂度比较低效率不高。