【剑指 Offer】第 6 天

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

一、前言

刷题啊!!!

开始刷 “剑指 Offer” 31天。刷完时间:2022.3.6 ~ 2022.3.20。

二、题目

题目:

  1. 从上到下打印二叉树
  2. 从上到下打印二叉树 II
  3. 从上到下打印二叉树 III

(1)面试题32 – I. 从上到下打印二叉树

题目描述


从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

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

    3
   / \
  9  20
    /  \
   15   7
返回:

[3,9,20,15,7]
复制代码

提示:节点总数 <= 1000

题解


典型的 BFS 题:

AC 代码如下:

class Solution {
    public int[] levelOrder(TreeNode root) {
        if (null == root) return new int[0];

        List<Integer> result = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
            int size = queue.size();
            for (int i = 0; i < size; ++i) {
                TreeNode node = queue.poll();
                if (null != node.left)  queue.add(node.left);
                if (null != node.right)  queue.add(node.right);
                result.add(node.val);
            }
        }
        int [] realResult = new int[result.size()];
        for (int i = 0; i < result.size(); ++i) {
            realResult[i] = result.get(i);
        }
        return realResult;
    }
}

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}
复制代码

(2)剑指 Offer 32 – II. 从上到下打印二叉树 II

题目描述


从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

 

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

    3
   / \
  9  20
    /  \
   15   7
返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]
复制代码

提示:

  • 节点总数 <= 1000

题解


AC 代码如下:

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        if (null == root) return Collections.emptyList();
        List<List<Integer>> result = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
            int size = queue.size();
            List<Integer> singleResult = new ArrayList<>(size);
            for (int i = 0; i < size; ++i) {
                TreeNode node = queue.poll();
                if (null != node.left)  queue.add(node.left);
                if (null != node.right)  queue.add(node.right);
                singleResult.add(node.val);
            }
            result.add(singleResult);
        }
        return result;
    }
}
复制代码

(3)剑指 Offer 32 – III. 从上到下打印二叉树 III

题目描述


请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

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

    3
   / \
  9  20
    /  \
   15   7
返回其层次遍历结果:

[
  [3],
  [20,9],
  [15,7]
]
复制代码

提示:节点总数 <= 1000

题解


AC 代码如下:

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        if (null == root) return Collections.emptyList();
        List<List<Integer>> result = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        boolean isRight = true;
        while (!queue.isEmpty()) {
            int size = queue.size();
            List<Integer> tmp = new ArrayList<>(size);
            for (int i = 0; i < size; ++i) {
                TreeNode node = queue.poll();
                if (null != node.left)  queue.add(node.left);
                if (null != node.right)  queue.add(node.right);
                tmp.add(node.val);
            }
             if(result.size() % 2 == 1) Collections.reverse(tmp);
            result.add(tmp);
        }
        return result;
    }
}
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享