LeetCode-Binary Tree Level Order Traversal

来源:互联网 发布:客户满意率的数据来源 编辑:程序博客网 时间:2024/06/05 00:16

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;    }}


0 0
原创粉丝点击