1302. 层数最深叶子节点的和

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/deepest-leaves-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

两种思路:
1,DFS ;找到叶子节点,记录最大深度和叶子值的和。如果再找叶子的过程中,有更深的,就重置数据。相同的就累加。不够深度的就不用管。
2,BFS ;就是层序遍历,遍历到最后就是最深叶子节点的和。

  int deep = -1;
    int ans = 0;
    public int deepestLeavesSum(TreeNode root) {
        dfs(root,0);
        return ans;
        // return bfs(root);
        
    }

    public void dfs(TreeNode root, int level) {
        if(root == null) {
            return;
        }

        dfs(root.left,level+1);
        dfs(root.right,level+1);

        // dfs都已经返回,说明现在的node已经是叶子节点
        // 判断层数是否是最大的,是:和增加,超过最大的深度:更新深度值,重新赋值和。否则就什么也不做
        if(level > deep) {
            deep = level;
            ans = root.val;
        } else if(level == deep) {
            ans += root.val;
        }

    }

    /**
    有两种方法,dfs,bfs
    bfs:将每一层的节点入队列,最后一次的和是结果
     */

     public int bfs(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        int sum = 0;
        while(!queue.isEmpty()) {
            int size = queue.size();
            sum = 0;
            for(int i=0;i<size;i++) {
                TreeNode cur = queue.poll();
                sum+=cur.val;
                if(cur.left != null) {
                    queue.add(cur.left);
                }

                if(cur.right != null) {
                    queue.add(cur.right);
                }
            } 
        }
        return sum;


     }
posted @ 2022-02-23 13:30  一颗青菜  阅读(5)  评论(0)    收藏  举报