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

一、前言

刷题啊!!!

开始刷 “剑指 Offer” 31天。刷完时间:2面试问题022.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]
]

提示:

  • 面试自我介绍3分钟通用点总数 <= 1000

题解


A面试常见问题及回答技巧C 代码如下:

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)剑指 Off面试自我介绍3分钟通用er 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;
    }
}