首页 > 其他分享 >代码随想录 第17天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

代码随想录 第17天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

时间:2024-03-10 14:34:42浏览次数:30  
标签:return 17 int 随想录 二叉树 path null root left

leetcode:110. 平衡二叉树 - 力扣(LeetCode)

class Solution {
    public boolean isBalanced(TreeNode root) {

        return getblan(root) != -1;

    }

    private int getblan(TreeNode root) {
        //为空退出
        if(root == null) return 0;
        //左节点高度
        int leftheight = getblan(root.left);
        //-1说明不平衡
        if(leftheight == -1) return -1;
        //有节点高度
        int rightheight = getblan(root.right);
        //同上
        if(rightheight == -1) return -1;
        //核心 判断左右高度差值
        if(Math.abs(leftheight - rightheight) > 1) return -1;
        //代码能运行到这,说明是平衡
        return 1 + Math.max(leftheight,rightheight);

    }
}

leetcode:257. 二叉树的所有路径 - 力扣(LeetCode)

class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> result = new ArrayList<>();
        if(root == null) return result;
        List<Integer> path = new ArrayList<>();
        getpath(root,path,result);
        return  result;
    }

    private void getpath(TreeNode root, List<Integer> path, List<String> result) {
        //前序 中
        path.add(root.val);
        //遇到叶子结点
        if(root.left == null && root.right == null){
            StringBuffer sb = new StringBuffer();
            //添加除了最后一个元素 ->
            for(int i = 0 ;i < path.size() -1 ;i++){
                sb.append(path.get(i)).append("->");
            }
            //合并最后一个元素
            sb.append(path.get(path.size() - 1));
            result.add(sb.toString()) ;
        }
        //左
        if( root.left !=null){
            getpath(root.left,path,result);
            //回溯到上一个节点
            path.remove(path.size()-1);
        }
        //右
        if( root.right !=null){
            getpath(root.right,path,result);
            //回溯到上一个节点
            path.remove(path.size()-1);
        }
    }
}

leetcode:404. 左叶子之和 - 力扣(LeetCode)

思路:差一点出来,就差在minvalue,我写成return了,return只能记录第一个节点,往后的right左子叶都累加不了。

class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        if(root == null) return 0;
        //后序
        //左 右 中
        int leftsum = sumOfLeftLeaves(root.left);
        int rightsum = sumOfLeftLeaves(root.right);
        //中
        int minvalue = 0;
        //判断左节点是否是左叶子节点,是就将该节点的值记录,之前写的return,不能记录右节点的左叶子节点,没有累加的作用
        if( root.left != null && root.left.left == null && root.left.right == null  ){
            minvalue = root.left.val;
        }

        int sum =leftsum + rightsum + minvalue;

        return sum;

    }
}

 

标签:return,17,int,随想录,二叉树,path,null,root,left
From: https://www.cnblogs.com/lengbo/p/18063898

相关文章

  • 第17章_触发器
    第17章_触发器讲师:尚硅谷-宋红康(江湖人称:康师傅)官网:http://www.atguigu.com在实际开发中,我们经常会遇到这样的情况:有2个或者多个相互关联的表,如商品信息和库存信息分别存放在2个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性,必须同时在库存表中添加......
  • Angular Material 17+ 高级教程 – CDK Accessibility の Focus
    前言  目录上一篇 AngularMaterial17+高级教程–MaterialRipple下一篇TODO想查看目录,请移步 Angular17+高级教程–目录......
  • [NOIP2017 提高组] 小凯的疑惑 / [蓝桥杯 2013 省] 买不到的数目
    这肯定是学证明了,看这篇文章补充一下细节首先,\(m\)的范围应该是\([0,b-1]\)然后,当\(m\)取不同值的时候,\(ma\)%\(b\)一定为不同值(这个性质确实有点奇特,可以记下来)反证,如果\(m_1a\equivm_2a\:(mod\:b)\)且\(0≤m_1<m_2≤b-1\),那么就有\(b|(m_2-m_1)a\),题目给出了\(a,b\)互质,......
  • KMP算法(基于代码随想录)的随笔
    KMPKMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。前缀表:起始位置到下标i之前(包括i)的子串中,有多大长度的相同前缀后缀。那么使用KMP可以解决两类经典问题:匹配问题:28.实现strStr()(opensnewwindow)重......
  • P1714 切蛋糕
    原题链接思路求最大区间和\(\to\)设每个点为区间右端点时的最大区间和\(f[i]\),则答案一定为\(max(f[i])\)\(\to\)求最大的\(f[i]\)\(\to\)每个\(f[i]=max(sum[i]-sum[j-1]),j\in[i-k+1,i]\)\(\to\)\(f[i]=sum[i]-min(sum[j-1])\)所以我们用单调双端队列动态维护/......
  • abc217E 带排序的查询
    题面:初始时有个空序列A,接下来有Q组操作,每个操作的格式如下:1x,将x追加到A的末尾。2,输出A开头的元素值,并移除。请求时保证A非空。3,对A中元素从小到大排序。范围:Q<=2E5;x<=1E9思路:用一个队列来维护还没有排序的元素,再用一个优先队列来维护已排序的元素。由于每次只能追加到末......
  • 代码随想录算法训练营第四十一天|01背包问题, 01背包问题—— 滚动数组,分割等和子集
    01背包问题,你该了解这些! 题目链接:46.携带研究材料(第六期模拟笔试)(kamacoder.com)思路:第一次遇到背包问题,好好记住吧。代码随想录(programmercarl.com)#include<bits/stdc++.h>usingnamespacestd;intmain(){intm,n;cin>>m>>n;vector<int>z(m);vec......
  • Angular Material 17+ 高级教程 – Material Ripple
    前言Ripple(波纹)是MaterialDesign其中一个标志性特色。  目录上一篇 AngularMaterial17+高级教程–MaterialIcon下一篇TODO想查看目录,请移步 Angular17+高级教程–目录 ......
  • abc172D 约数之和
    题面:记f(x)表示x的约数个数,例如,12的约数有1,2,3,4,6,12共6个,因此f(12)=6。给定n,求\(\sum_{k=1}^{n}k*f(k)\)。范围:n<=1E7思路:用类似素数筛的做法预处理出所有f,然后遍历一次得到答案,时间复杂度O(nloglogn)。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglon......
  • C++ 17新特性
    C++17是C++语言的一个重要版本,引入了许多新特性和改进,以提高开发效率和代码质量。以下是一些常用的C++17新特性:结构化绑定(StructuredBindings):允许以声明式语法将复合类型(如元组、数组、结构体)中的成员绑定到变量上,从而简化代码并提高可读性。#include<tuple>std::tup......