美文网首页
Binary Tree Level Order Traversa

Binary Tree Level Order Traversa

作者: 无为无悔 | 来源:发表于2016-11-27 10:32 被阅读0次
    • 描述
      Given a binary tree, return the level order traversal of its nodes’ values.

    For example: Given binary tree {3,9,20,#,#,15,7}, return
    [
    [3],
    [9,20],
    [15,7]
    ]

    • 分析
      不需要保存具体层的很简单,参考广度优先搜索BFS思想,只需要一个辅助队列,本题需要两个辅助队列,一个保存0层的节点,一个保存1层的节点(也就是0层的下层节点),当0层节点的队列出队完毕,那么1层队列也填满,交换两个队列,扫描1层的下层节点,也就是2层,如此循环下去,直到最下层叶子扫描完毕。
    • 时间复杂度O(n),空间复杂度O(n)
    
    
    import java.util.*;
    
    public class Solution {
        public List<List<Integer>> levelOrderTraverse(TreeNode root) {
            List<List<Integer>> result = new ArrayList<>();
            if(root == null)
                return result;
            Queue<TreeNode> rootQueue = new LinkedList<>();
            Queue<TreeNode> leafQueue = new LinkedList<>();
            rootQueue.add(root);
            while(!rootQueue.isEmpty()) {
                List<Integer> levelRes = new ArrayList<>();
                while(!rootQueue.isEmpty()) {
                    TreeNode p = rootQueue.poll();
                    levelRes.add(p.val);
                    if(p.left != null) leafQueue.add(p.left);
                    if(p.right != null) leafQueue.add(p.right);
                }
                result.add(levelRes);
                // 交换上层和下层的队列
                Queue<TreeNode> tmp = rootQueue;
                rootQueue = leafQueue;
                leafQueue = tmp;
            }
            return result;
        }
    }
    

    相关文章

      网友评论

          本文标题:Binary Tree Level Order Traversa

          本文链接:https://www.haomeiwen.com/subject/jozgpttx.html