515. Find Largest Value in Each Tree Row

题目描述 中等难度

515. Find Largest Value in Each Tree Row_第1张图片
找出二叉树中每一行的最大值,保存到数组中。

解法一 BFS

官渡优先遍历一般直接和队列联系起来。

import java.util.*;

class TreeNode{
     
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int val){
     this.val=val;}
}
//BFS
public class Find_Largest_Value_in_Each_Tree_Row {
     

    public static List<Integer> largestValues(TreeNode root){
     
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        List<Integer> ans = new ArrayList<Integer>();
        if(root!=null) queue.offer(root);

        while(!queue.isEmpty()){
     
            int max =Integer.MIN_VALUE;
            int n = queue.size();
            for(int i=0;i<n;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);
            }
            ans.add(max);
        }
        return ans;
    }
    public static void main(String args[]) {
     
        TreeNode[] node=new TreeNode[6];
        node[0]=new TreeNode(1);
        node[1]=new TreeNode(3);
        node[2]=new TreeNode(2);
        node[3]=new TreeNode(5);
        node[4]=new TreeNode(3);
        node[5]=new TreeNode(9);
        node[0].left=node[1];
        node[0].right=node[2];
        node[1].left=node[3];
        node[1].right=node[4];
        node[2].right=node[5];

        List<Integer> ans=largestValues(node[0]);
        System.out.println(ans);
    }
}

解法二 DFS

深度优先搜索:先将每一层的左子树的值保存到数组中,再依次在每层进行比较。

import java.util.*;
//DFS
public class Find_Largest_Value_in_Each_Tree_Row2 {
     

    public static List<Integer> largestValues(TreeNode root){
     
      List<Integer> res = new ArrayList<>();
      helper(root,res,0);
      return res;
    }
    private static void helper(TreeNode root,List<Integer> res,int depth){
     

        if(root==null) return;

        if(depth==res.size()){
     
            res.add(root.val);
        }else{
     
            res.set(depth,Math.max(res.get(depth),root.val));
        }
        helper(root.left,res,depth+1);
        helper(root.right,res,depth+1);
    }

    public static void main(String args[]) {
     
        TreeNode[] node=new TreeNode[6];
        node[0]=new TreeNode(1);
        node[1]=new TreeNode(3);
        node[2]=new TreeNode(2);
        node[3]=new TreeNode(5);
        node[4]=new TreeNode(4);
        node[5]=new TreeNode(9);
        node[0].left=node[1];
        node[0].right=node[2];
        node[1].left=node[3];
        node[1].right=node[4];
        node[2].right=node[5];

        List<Integer> ans=largestValues(node[0]);
        System.out.println(ans);
    }
}

总结

  • 这道题考察的就是对于深度优先遍历和广度优先遍历的应用。
  • 参考代码最好到国际站,代码比较优良。

参考文献

  • https://leetcode.com/problems/find-largest-value-in-each-tree-row/discuss/98971/9ms-JAVA-DFS-solution

你可能感兴趣的:(LeetCode)