首页 > 编程语言 >代码随想录算法训练营第15天 | 二叉树进阶

代码随想录算法训练营第15天 | 二叉树进阶

时间:2024-07-21 17:41:52浏览次数:14  
标签:right 15 TreeNode 随想录 二叉树 return null root left

2024年7月17日

平衡二叉树

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isBalanced(TreeNode root) {
        if(digui(root)==1){
            return true;
        }else{
            return false;
        }
    }

    public int digui(TreeNode root){
        if(root==null){
            return 1;
        }
        int h1 = height(root.left);
        int h2 = height(root.right);
        if(Math.abs(h1-h2)>1){
            return 0;
        }else{
            return digui(root.left)*digui(root.right);
        }
    }

    public int height(TreeNode root){
        int height=1;
        if(root==null){
            return 0;
        }else{
            return Math.max(he(root.left,height),he(root.right,height));
        }
    }

    public int he(TreeNode root, int height){
        if(root!=null){
            height+=1;
            return Math.max(he(root.left,height),he(root.right,height));
        }else{
            return height;
        }
    }
}

题257. 二叉树的所有路径
涉及回溯,所以把路径记录设置为类成员,这样就不用反复传递了。

import java.util.*;

class Solution {

    Vector<Integer> vec;

    public List<String> binaryTreePaths(TreeNode root) {
        List<String> list = new ArrayList<>();
        vec = new Vector<>();
        vec.add(root.val);
        if(root.left==null&& root.right==null){
            list.add(""+root.val);
            return list;
        }
        if(root.left!=null){
            list = digui(root.left,list);
        }
        if(root.right!=null){
            list = digui(root.right,list);
        }
        return list;
    }

    public List<String> digui(TreeNode root,List<String> list){
        vec.add(root.val);
        if(root.left==null && root.right==null){
            
            String res1 = "";
            for(int i=0;i<vec.size()-1;i++){
                res1+=vec.get(i);
                res1+="->";
            }
            res1+=vec.get(vec.size()-1);
            list.add(res1);
            
            
        }else{
            if(root.left!=null){
                list = digui(root.left,list);
            }
            if(root.right!=null){
                list = digui(root.right,list);
            }
            
        }
        vec.remove(vec.size()-1);
        return list;
    }
}

题404. 左叶子之和
用一个标志位来记录当前节点是左子还是右子,如果是左子,就再判断是不是叶子节点,如果是才加上值。

class Solution {

    int sum;

    public int sumOfLeftLeaves(TreeNode root) {
        if(root==null){
            return 0;
        }
        if(root.left==null&&root.right==null){
            return 0;
        }
        sum=0;
        if(root.left!=null){
            digui(root.left,1);
        }
        if(root.right!=null){
            digui(root.right,0);
        }
        return sum;
    }

    public void digui(TreeNode root,int bool){
        if(root.left==null && root.right==null && bool==1){
            sum+=root.val;
            return;
        }
        if(root.left!=null){
            digui(root.left,1);
        }
        if(root.right!=null){
            digui(root.right,0);
        }
        return;
    }
}

标签:right,15,TreeNode,随想录,二叉树,return,null,root,left
From: https://www.cnblogs.com/hailicy/p/18314726

相关文章

  • 暑期ACM-Week1(7.15-7.21)
    文章目录知识点基础程序设计技巧万能[头文件](#C++中的输入输出)while执行多次输入循环退出scanf,printf&cin,coutint初定义开数组一般大小:布尔型(bool)基本数据类型取值范围文件输入输出操作浮点数陷阱C++中的输入输出递归案例1:设计一个求阶乘的递归函数案例2:设计一个......
  • 大创项目个人周报(2024.7.15—2024.7.21)
    一、搭建开发环境1.下载AndroidStudio2.运行第一个程序二、入门Kotlin语言1.打印语句的操作,用println()函数funmain(){println("HelloWorld!")}2.变量的定义:在Kotlin中定义变量只有以如下两种方式定义var[变量名称]:[数据类型]val[变量名称]:[数据类型......
  • 代码随想录算法训练营第34天 | 贪心算法 5:56.合并区间、738.单调递增的数字
    56.合并区间https://leetcode.cn/problems/merge-intervals/description/代码随想录https://programmercarl.com/0056.合并区间.html738.单调递增的数字https://leetcode.cn/problems/monotone-increasing-digits/description/代码随想录https://programmercarl.com/0738.......
  • 代码随想录算法训练营第35天 | 动态规划1:509.斐波那契数、70.爬楼梯、746.使用最小花
    代码随想录算法训练营第35天|动态规划理论基础https://programmercarl.com/动态规划理论基础.html#算法公开课509.斐波那契数https://leetcode.cn/problems/fibonacci-number/submissions/548309803/代码随想录https://programmercarl.com/0509.斐波那契数.html#算法公开......
  • Leetcoede编程基础0到1——459.重复的子字符串 & 283.移动零 &1822.数组元素积的符号
    459.重复的子字符串给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。示例1:输入:s="abab"输出:true解释:可由子串"ab"重复两次构成。示例2:输入:s="aba"输出:false示例3:输入:s="abcabcabcabc"输出:true解释:可由子......
  • 大创项目个人周报(24.7.15-24.7.21)
    本周主要利用B站学习Kotlin语言一、完成环境的配置和软件的下载1、开发环境配置安装Java8环境2、IDEA安装与使用熟悉IDEA软件3、熟悉简单代码vara:Int//println("KFCvivo50")二、变量与基本类型1、变量的声明与使用var[变量名称]:[数据类型]例:funmain(......
  • InvalidDimensionException:嵌入维度 384 与集合维度 1536 不匹配
    我正在Chromadb上编写python代码来创建矢量数据库我尝试在chromadb中创建包含嵌入的集合。在使用包括嵌入的矢量数据库创建索引期间,我面临这个问题出现错误信息“InvalidDimensionException:嵌入维度384与集合维度1536不匹配”的原因是,你正尝试将维度为384的......
  • 代码随想录数组二刷:长度最小的子数组(滑动窗口)
    代码随想录数组二刷:长度最小的子数组(滑动窗口)leetcode209这道题采用滑动窗口的思想去做。实现滑动窗口,主要确定如下三点:窗口内是什么?如何移动窗口的起始位置?如何移动窗口的结束位置?窗口就是满足其和≥s的长度最小的连续子数组。窗口的起始位置如何移动:如果当前窗口......
  • 如何实现 Grad-CAM 在 TensorFlow ResNet152V2 上查看激活图/热图以进行图像分类
    您好,我正在使用ResNet152V2做一个关于TensorFlow图像分类的小项目。我编写了一个Train-Predict.py脚本,它能够训练trained_weights.hdf5文件以成功预测自闭症和非自闭症人士的图像。此处。是脚本:#ImportLibrariesimportosimportnumpyasnp......
  • 代码随想录算法训练营第十七天 | 530.二叉搜索树的最小绝对差 、 501.二叉搜索树中的
    530.二叉搜索树的最小绝对差 题目:.-力扣(LeetCode)思路:中序遍历搜索二叉树,使用双指针来计算绝对值。代码:/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),......