leetcode 515. Find Largest Value in Each Tree Row

来源:互联网 发布:乐知小儿英语怎么样 编辑:程序博客网 时间:2024/05/17 21:57
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]

这题其实就是个广度优先搜索,一般解法是用队列

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public List<Integer> largestValues(TreeNode root) {        Queue<TreeNode> queue = new LinkedList<>();        List<Integer> res = new ArrayList<>();        if(root==null) return res;        queue.add(root);        queue.add(null);        while(!queue.isEmpty()){            TreeNode p = queue.poll();            int max = p.val;            while(p!=null){                if(p.val > max) max = p.val;                if(p.left!=null) queue.add(p.left);                if(p.right!=null) queue.add(p.right);                p = queue.poll();            }            res.add(max);            if(!queue.isEmpty()) queue.add(null);        }        return res;    }}

然而因为是每层返回一个值,可以像上一篇一样,记录下到每个节点的深度,只要在改深度上更新即可

public class Solution {    public List<Integer> largestValues(TreeNode root) {        List<Integer> res = new ArrayList<Integer>();        helper(root, res, 0);        return res;    }    private void helper(TreeNode root, List<Integer> res, int d){        if(root == null){            return;        }       //expand list size        if(d == res.size()){            res.add(root.val);        }        else{        //or set value            res.set(d, Math.max(res.get(d), root.val));        }        helper(root.left, res, d+1);        helper(root.right, res, d+1);    }}
阅读全文
0 0
原创粉丝点击