zoukankan      html  css  js  c++  java
  • 【数据结构】算法 层数最深叶子节点的和 Deepest Leaves Sum

    层数最深叶子节点的和 Deepest Leaves Sum

    一棵二叉树的根节点root,返回层数最深的叶子节点的和。

    in: root = [1,2,3,4,5,null,6,7,null,null,null,null,8]
    out:15
    
    

    思路

    对树的处理基本就是 DFS,BFS。

    看到一个非常有意思的思路,通过dfs递归求解,递归方法中需要有一个当前节点node,和当前节点node的深度。同样在外部我们还要有一个max_deep来记录最深的层数,以及一个记录结果的ans。

    每次进入递归方法时,除了边界条件外,还要将节点的层数与最大的深度进行比较如果当前的节点深度比记录的max还要大,说明我们已经找到了一个更深的节点,将之前的max_deep更新,并将当前的节点值保存到ans。如果我们遇到的节点与当前记录的最大深度一致,那么就加入ans。

    时间复杂度O(n) n是节点数。空间复杂度O(H)即树深度,当然最差情况下也是O(n)

       int max_deep,ans;
        public void getResult(TreeNode root ,int k ){
            if(root==null){
                return ;
            }
            if(k == max_deep){
                ans += root.val;//找到同样深度的node,val相加
            }
            if(k>max_deep){
                max_k = k;
                ans = root.val;//找到更深的node,val覆盖
            }
            getResult(root.left,k+1);
            getResult(root.right,k+1);
            return;
        }
    
        public int deepestLeavesSum(TreeNode root) {
            getResult(root,0);
            return ans;
        }
    

    Tag

    Tree,DFS

  • 相关阅读:
    PHP和JS判断手机还是电脑访问
    apache 一个站点配置多个域名
    拾遗
    提高工作效率的工具
    PHP urlencode
    JS encodeURI和encodeURIComponent
    Linux实践:ELF文件格式分析
    Linux实践:文件破解
    Linux实践:模块
    Linux内核学习期末总结(网课)
  • 原文地址:https://www.cnblogs.com/dreamtaker/p/15423053.html
Copyright © 2011-2022 走看看