【LeetCode】最大层内元素和 Java 题解
题目描述
给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。
请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。
复制代码
思路分析
今天的算法题目是二叉树的题目,题目要求请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。
分析题目之后,我们首先需要求出每一层的元素只和。求每次元素只和的时候,我们一般使用 BFS。BFS 全称是 Breadth First Search,中文名是宽度优先搜索,也叫广度优先搜索,是图上最基础、最重要的搜索算法之一。所谓宽度优先。就是每次都尝试访问同一层的节点。 如果同一层都访问完了,再访问下一层。
在 Java 中,我们使用队列 Queue 来存储元素,完成 BFS 相关的功能,首先把 root 放入队列,然后每次计算出当前队列的长度,就是当前层元素的个数,逐个出队,完成当前层元素求和计算。
在求答案的过程中,我们定义了 ansNode 节点,记录当前的层数和最值,动态更新结果对象。
具体实现代码如下,请参考。
通过代码
复制代码
总结
上述算法的时间复杂度是 O(n),空间复杂度是 O(n)
BFS 算法还常常用来找最短路径, BFS 结束时,每个节点都是通过从起点到该点的最短路径访问的。
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/f31ea0affcbf4850fc74bb3f6】。文章转载请联系作者。
评论