声明:问题描述来源于leetcode
一、问题描述:
515. 在每个树行中找最大值
难度中等281
给定一棵二叉树的根节点 root
,请找出该二叉树中每一层的最大值。
示例1:
输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
示例2:
输入: root = [1,2,3]
输出: [1,3]
提示:
- 二叉树的节点个数的范围是
[0,104]
-231 <= Node.val <= 231 - 1
二、题解
class Solution {
List<Integer> list = new LinkedList<>();
public List<Integer> largestValues(TreeNode root) {
if (root == null) return list;
list.add(root.val);
searchGoalByOrder(0,root);
return list;
}
private void searchGoalByOrder(int order, TreeNode root) {
if (root.val > list.get(order)) list.set(order,root.val);
if (root.left != null){
if (order + 1 > list.size() - 1) list.add(Integer.MIN_VALUE);
searchGoalByOrder(order + 1,root.left);
}
if (root.right != null){
if (order + 1 > list.size() - 1) list.add(Integer.MIN_VALUE);
searchGoalByOrder(order + 1,root.right);
}
}
}
还是前序遍历,广度优先算法的应用。
做是做完了,都是xin麒觉得还是可能有更好的优化,因为即将进入下一层树层时,总是要判断链表长度是否够,如果不够那么就需要往链表添加int的最小值,以便进入递归函数时最开始的判断。如果不添加那么在和树节点的val比较时容易爆空指针异常.