层序遍历(需要知道层数)

求二叉树的层序遍历

http://www.nowcoder.com/questionTerminal/04a5560e43e24e9db4595865dc9c63a3

层序遍历(需要知道层数)

每次把当前层的所有节点加入另一个队列
当当前队列没有元素时切换到另一个队列,然后另一个队列初始化

import java.util.*;

public class Solution {

    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
        if (root == null) return new ArrayList<ArrayList<Integer>>();

        Queue<TreeNode> queue = new LinkedList<>();
        Queue<TreeNode> queue2 = new LinkedList<>();
        queue.add(root);
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        ArrayList<Integer> arr = new ArrayList<>();

        while(!queue.isEmpty()) {
            TreeNode t = queue.poll();
            arr.add(t.val);
            if (t.left != null) queue2.add(t.left);
            if (t.right != null) queue2.add(t.right);
            if (queue.isEmpty()) { //当当前队列为空
                queue = queue2; //切换到另一个队列
                queue2 = new LinkedList<>(); //另一个队列初始化
                res.add(arr);
                arr = new ArrayList<>();
            }
        }

        return res;
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务