以下两道题是本人几年前面试遇到过的真实面试题,由于当年刷题不够,思路也不到位,导致没有答好。今天正好刷LeetCode,看到原题了,勾起了我的回忆......
1 给定一棵二叉树,找到每一行中的最大值。
输入:
1 / \ 3 2 / \ \ 5 3 9
输出: [1, 3, 9]
LeetCode原题,题号是515。
先说答案:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public List<Integer> largestValues(TreeNode root) { List<Integer> res =new ArrayList<>(); Queue<TreeNode> q = new LinkedList<>(); if (root ==null ){ return res; } q.add(root); while(!q.isEmpty()){ int size = q.size(); int max = Integer.MIN_VALUE; for(int i = 0; i<size; i++){ TreeNode node = q.poll(); max = Math.max(max,node.val); if (node.left !=null){ q.add(node.left); } if (node.right !=null){ q.add(node.right); } } res.add(max); } return res; } }
是的,就是利用队列做BFS,有关二叉树层次遍历的思路都可以套用。
2 手写 hashmap的put方法
我不知道多少人能写出来,说实话直到现在我也写不出来。但冷静下来细想,人家真的是考你能不能完全写出来吗?我想,可能还是考查你对于put的熟悉程序,对流程的把握,如果你把基本流程用伪代码讲清楚了,怎么也能答到及格吧。