求二叉树中同一层结点数据之和最大的层

[!Tip]

本节源代码见Github链接🔗


问题描述

求二叉树中同一层结点数据之和最大的层


核心思路

逻辑上类似查找二叉树的层数,使用层次遍历每一层结点数之和,并比较每一层结点和的大小,取最大值,并记录最大值的层级


实现代码

【👉🏻>>点击展开查看代码】
        
        /**  
         * 找出二叉树中同一层级结点数据之和最大的层  
         *  
         * @className: FindLevelWithMaxSum  
         * @author: Max Solider  
         * @date: 2023-06-11 22:07  
         */public class FindLevelWithMaxSum {  

            public static int findLevelWithMaxSum(BinaryTreeNode root) {  
                if (root == null) {  
                    return 0;  
                }  
                int maxLevel = 0;  
                int maxSum = 0;  
                int level = 0;  
                int sum = 0;  
                ArrayQueue queue = new ArrayQueue(20);  
                queue.enQueue(root);  
                queue.enQueue(null);  
                while (!queue.isEmpty()) {  
                    BinaryTreeNode tmp = (BinaryTreeNode) queue.deQueue();  
                    // 遍历到null结点,说明已经遍历完一层,将当前层级的结点之和与前面最大值作对比,更新最大值和对应层级  
                    if (tmp == null) {  
                        if (maxSum < sum) {  
                            maxLevel = level;  
                            maxSum = sum;  
                        }  
                        if (!queue.isEmpty()) {  
                            queue.enQueue(null);  
                        }  
                        sum = 0;  
                        level++;  
                    } else {  
                        sum += tmp.getData();  
                        queue.enQueue(tmp.getLeft());  
                        queue.enQueue(tmp.getRight());  
                    }  
                }  
                return maxLevel;  
            }  
        }
        
    

时间复杂度

时间复杂度为O(n)


空间复杂度

空间复杂度为O(n)


© MaxSolider all right reserved,powered by Gitbook文件修订时间: 2023-06-11 22:32:22

results matching ""

    No results matching ""