給定一棵二叉樹的根節點 root
,請找出該二叉樹中每一層的最大值。
示例1:
輸入: root = [1,3,2,5,3,null,9]
輸出: [1,3,9]
示例2:
輸入: root = [1,2,3]
輸出: [1,3]
二叉樹的搜尋無非就是DFS或者BFS,通常DFS用的比較多,這道題兩個方法都可以,但是題目要求找到每一層的最大值,所以個人覺得層序遍歷比較清晰,當然深度優先使用一個變數記錄當前層數也可以完成這個任務。
DFS
遞迴遍歷二叉樹,每次進入下一層使層數加一,維護當前層數的最大值。
BFS
廣度優先搜尋,按模板寫就行,在一層內維護一個最大值,遍歷完一層後加入結果。
貼一個BFS:
class Solution { public List<Integer> largestValues(TreeNode root) { if (root == null) { return new ArrayList(); } Deque<TreeNode> queue = new LinkedList<>(); queue.offer(root); List<Integer> res = new ArrayList<>(); while (!queue.isEmpty()) { int len = queue.size(); int max = Integer.MIN_VALUE; for (int i = 0; i < len; i++) { TreeNode node = queue.poll(); max = Math.max(max, node.val); if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } } res.add(max); } return res; } }
原文:https://leetcode.cn/problems/find-largest-value-in-each-tree-row/solution/by-nice-hermann9a2-nnrq/