【Leetcode-Java】102. Binary Tree Level Order Traversal

来源:互联网 发布:爱上学软件下载 编辑:程序博客网 时间:2024/05/01 07:51

1.原题

链接:https://leetcode.com/problems/binary-tree-level-order-traversal/

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree [3,9,20,null,null,15,7],

    3   / \  9  20    /  \   15   7

return its level order traversal as:

[  [3],  [9,20],  [15,7]]

2.题目大意

从上往下打印二叉树的每个结点,同一层的结点按照从左到右的顺序。

3.解题思路

这是一道广度搜索的题。首先从树的根结点出发,为了能打印该根结点的两个子结点,则在遍历根结点的时候,先把子结点保存到容器中,因为输出为从左到右,则可利用队列的先进先出性质,按左结点、右结点的顺序存入,也按左结点、右结点的顺序取出。因此,打印的规律为:每次打印一个结点时,如果该结点有子结点,则把子结点放入队列的末尾。再依次从队列的头部取出最早进入队列的结点,重复打印操作。

4.代码实现

    public List<List<Integer>> levelOrder(TreeNode root) {
        Queue<TreeNode> queue=new LinkedList<>();
List<List<Integer>> res=new LinkedList<>();
if(root==null ) return res;
queue.offer(root);
while(!queue.isEmpty()){
int size=queue.size();
List<Integer> sub=new LinkedList<>();
for(int i=0;i<size;i++){
   if(queue.peek().left!=null) queue.offer(queue.peek().left);
if(queue.peek().right!=null) queue.offer(queue.peek().right);

sub.add(queue.poll().val);
}
res.add(sub);
}
return res;
    }

0 0
原创粉丝点击