515. 在每個樹行中找最大值

良人吶發表於2022-07-02

515. 在每個樹行中找最大值

給定一棵二叉樹的根節點 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/

相關文章