《leetCode》:Binary Tree Level Order Traversal

来源:互联网 发布:淘宝找人微信代付步骤 编辑:程序博客网 时间:2024/05/03 21:00

题目

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,#,#,15,7},    3   / \  9  20    /  \   15   7return its level order traversal as:[  [3],  [9,20],  [15,7]]

思路

这个题与《剑指Offer》上面的按层打印的思路较像,都是借用队列来完成,本题的思路为:借用两个队列,当访问到某个节点时就将其左右子节点放入另一个队列进行保存,这样当访问玩第i层的所有节点时就将第i+1层的节点按从左到右的顺序保存到了队列中。

实现代码如下:

/** * 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) {        Queue<TreeNode> q1=new LinkedList<TreeNode>();         Queue<TreeNode> tempQ=new LinkedList<TreeNode>();        List<List<Integer>> res=new ArrayList<List<Integer>>();        if(root==null){            return res;        }        q1.add(root);        while(!q1.isEmpty()){            List<Integer> list=new ArrayList<Integer>();            while(!q1.isEmpty()){//取出这一层中所有结点的值                TreeNode node=q1.remove();                list.add(node.val);                //将该结点的左右子节点放入另一个队列中                if(node.left!=null){                    tempQ.add(node.left);                }                if(node.right!=null){                    tempQ.add(node.right);                }            }            res.add(list);            //将tempQ队列中的元素拷贝到q1队列中,供下次循环使用            while(!tempQ.isEmpty()){                q1.add(tempQ.remove());            }                   }        return res;    }}
1 0