LeetCode——binary-tree-level-order-traversal-ii

Q:给定一个二叉树,返回该二叉树由底层到顶层的层序遍历,(从左向右,从叶子节点到根节点,一层一层的遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
3↵ / ↵ 9 20↵ / ↵ 15 7
该二叉树由底层到顶层层序遍历的结果是
[↵ [15,7]↵ [9,20],↵ [3],↵]
如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读
OJ用这样的方法将二叉树序列化:
二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。
例如:
1↵ / ↵ 2 3↵ /↵ 4↵ ↵ 5
上述的二叉树序列化的结果是:"{1,2,3,#,#,4,#,#,5}".
A:层序遍历,每次添加到0的位置上

    public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        ArrayList<ArrayList<Integer>> wrapList = new ArrayList<ArrayList<Integer>>();

        if(root == null) return wrapList;

        queue.offer(root);
        while(!queue.isEmpty()){
            int levelNum = queue.size();
            ArrayList<Integer> subList = new ArrayList<Integer>();
            for(int i=0; i<levelNum; i++) {
                if(queue.peek().left != null) queue.offer(queue.peek().left);
                if(queue.peek().right != null) queue.offer(queue.peek().right);
                subList.add(queue.poll().val);
            }
            //每次将结果保存到下标为0的位置
            wrapList.add(0, subList);
        }
        return wrapList;
    }

猜你喜欢

转载自www.cnblogs.com/xym4869/p/12517807.html