[抄题]:
You need to find the largest value in each row of a binary tree.
Example:
Input: 1 / 3 2 / 5 3 9 Output: [1, 3, 9]
[暴力解法]:
时间分析:
空间分析:
[优化后]:
时间分析:
空间分析:
[奇葩输出条件]:
[奇葩corner case]:
[思维问题]:
不知道怎么确定每一行的大小:不熟悉bfs。其中q每次只存了一行,所以size就是当前数组的大小
[英文数据结构或算法,为什么不用别的数据结构或算法]:
Queue<TreeNode> q = new LinkedList<>(); 因为都可以随便动?
[一句话思路]:
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
BFS要点:(3先生)先加头、先判Empty、先取长度
[复杂度]:Time complexity: O(n) Space complexity: O(n)
图是v+e 树就是点数n
[算法思想:迭代/递归/分治/贪心]:
[关键模板化代码]:
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
[是否头一次写此类driver funcion的代码] :
// package whatever; // don't place package name! import java.io.*; import java.util.*; import java.lang.*; class TreeNode { int val; TreeNode left, right; //parameter is another item TreeNode(int item) { val = item; left = right = null; } } class Solution { TreeNode root; public List<Integer> largestValues(TreeNode root) { //ini: q, int max, Array int max = Integer.MIN_VALUE; //implement by linkedlist Queue<TreeNode> q = new LinkedList<>(); List<Integer> answer = new ArrayList<Integer>(); //cc if (root == null) return answer; q.offer(root); while (!q.isEmpty()) { // int size = q.size(); for (int i = 0; i < size; i++) { TreeNode cur = q.poll(); max = Math.max(cur.val, max); if (cur.left != null) q.offer(cur.left); if (cur.right != null) q.offer(cur.right); } //add to answer answer.add(max); //renew max max = Integer.MIN_VALUE; } return answer; } } class MyCode { public static void main (String[] args) { Solution tree = new Solution(); tree.root = new TreeNode(1); tree.root.left = new TreeNode(2); tree.root.right = new TreeNode(3); tree.root.left.left = new TreeNode(4); tree.root.left.right = new TreeNode(5); //TreeNode t = tree.upsideDownBinaryTree(tree.root); List<Integer> answer = tree.largestValues(tree.root); int size = answer.size(); for (int i = 0; i < size; i++) System.out.println("answer[i] = " + answer.get(i)); } }
[潜台词] :