LeetCode-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]
]

Subscribe to see which companies asked this question

此题的思路:用两个队列分别保存当前行和下一行的所有结点,遍历每一层的结点,都把结点放入到 nodeValues 中,当前层遍历结束,将当前层的nodeValues 存入 al 里,知道所有层都遍历结束,返回 al。

代码如下:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List< List< Integer > > levelOrder( TreeNode root ) {
       ArrayList < List< Integer > > al = new ArrayList < List< Integer > >();   //存储所有层上的结点值
        ArrayList < Integer >  nodeValues = new ArrayList < Integer >();     //存储每一层上的所有结点值
        if( root == null )
            return al;
        //创建两个队列,一个保存当前层的所有结点,另外一个保存下一层的所有结点
        LinkedList < TreeNode > current = new LinkedList < TreeNode >();   //存储当前层的结点
         LinkedList < TreeNode > next = new LinkedList < TreeNode >();    //存储下一层的结点
         current.add( root );
         while( !current.isEmpty() ){
             TreeNode node = current.remove();   //一处队列中第一个元素
             if( node.left != null )
             next.add ( node.left );       //把当前结点的左子结点放入到next中
             if( node.right != null )
             next.add( node.right );      //把当前结点的右子结点放入到next中
             nodeValues.add( node.val );  //把当前结点放入到nodeValues中
             if( current.isEmpty() ){    //当前层已经遍历完成
                 current = next;     //往下移一层
                 next = new LinkedList < TreeNode >();    //重新创建next
                 al.add( nodeValues );            //将当前层的所有节点值放入到al中
                 nodeValues = new ArrayList <> ();       //重新创建nodeValues
             }
         }
         return al;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值