二叉树的层次遍历II

半世苍凉 提交于 2019-12-02 10:53:57

给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

例如:
给定二叉树 [3,9,20,null,null,15,7],

          3
         / \
        9  20
      /  \
     15   7

返回其自底向上的层次遍历为:

[
[15,7],
[9,20],
[3]
]

由例子可以看出,用队列做比较方便。最终返回的是一个List<List<>>型,中间的List是ArrayList<>型。用队列存储节点,然后将每一层的节点值依次存入ArrayList<>。这里使用了count记录每层节点数。

    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        LinkedList<List<Integer>> result = new LinkedList<>();
        if (root == null)
            return result;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
            List<Integer> oneLevel = new ArrayList<>();
            // 每次都取出一层的所有数据
            int count = queue.size();
            //根据每层的节点数来遍历,每层有几个从对头删除几个
            for (int i = 0; i < count; i++) {
            //记录队列第一个节点值到ArrayList中
            //如果其有左右孩子,存入queue中
                TreeNode node = queue.poll();
                oneLevel.add(node.val);
                if (node.left != null)
                    queue.add(node.left);
                if (node.right != null)
                    queue.add(node.right);
            }
            // 每次都往队头塞
            result.addFirst(oneLevel);
        }
        return result;
    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!