Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • 数组

  • 链表

  • 字符串

  • 二叉树

    • 102.二叉树的层序遍历
    • 103.二叉树的锯齿形层序遍历
    • 124.二叉树中的最大路径和
    • 236.二叉树的最近公共祖先
    • 105.从前序与中序遍历序列构造二叉树
    • 662.二叉树最大宽度
    • 1080. 根到叶路径上的不足节点
    • 101. 对称二叉树
    • 226. 翻转二叉树
    • 114. 二叉树展开为链表
    • 1110. 删点成林
    • 337. 打家劫舍 III
    • 979. 在二叉树中分配硬币
    • 222. 完全二叉树的节点个数
    • 513. 找树左下角的值
    • 968. 监控二叉树
    • 剑指offer34
    • 剑指 Offer 32 - III. 从上到下打印二叉树 III
    • 剑指 Offer 33. 二叉搜索树的后序遍历序列
    • 线索二叉树

    • 二叉搜索树

  • 动态规划

  • 深搜回溯

  • 数学贪心

  • 堆栈队列

  • 前缀和

  • 算法设计

  • 位运算

  • WA

  • 算法
  • 二叉树
phan
2023-05-16

剑指offer34

# 剑指offer34

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

在这里插入图片描述

  1. list容器(数组线性表):List<List<Integer>> list=new ArrayList<>()
  • list.add(obj)向尾部添加元素,list.add(int index,Object obj)向index索引位置添加元素。特别要注意的是,add()方法加入的是对象的地址,要加入不同对象需要new新的对象。add()允许添加重复元素。
  • list.remove(int i)删除索引i位置的元素,可以这样子写remove(list.indexOf(Object a))。另一种是remove(Object a),如果是对象引用则直接传对象引用作为参数,若传的是基本类型,则需要先转化成包装类remove(Integer.valueOf(250))。
  • list.size()获取list的长度
  • list.get(int i)返回索引下标为i的元素
  • list.contains(int i)容器中含有i则返回true,可以用来去重。
  • List<object> list=new ArrayList<>(Arrays.asList(object a,object b,object c...)):一种初始化写法
  1. 注意找到正确的路径记录进list时,若直接执行list.add(path) ,则是将 path 对象加入了list ;后续 path 改变时,list 中的 path 对象也会随之改变。因此每次添加一个新的容器进入到容器,都要新实例化一个新的容器。list.add(new ArrayList<>(path)),相当于复制了一个path加入到list。

  2. 深搜过程中,如果是叶子结点则判断当前路径能不能加入到list当中然后退出当前搜索,否则继续遍历左子树和右子树。难点在于路径记录,path记录时如何保证当前父节点路径不变而只改变后加入的子节点路径。令每个结点进入搜索时当前val值加入到path,退出搜索回溯父节点前,再从path中退出来。

    public void dfs( List<List<Integer>> list,List<Integer> path,TreeNode root,int target)  //注意整形Integer首字母要大写
        {
            if(root.right==null&&root.left==null)//叶子节点
            {
            if(target==root.val)
            {
                path.add(target);
                list.add(new ArrayList<>(path));
                path.remove(path.size()-1);
                return;
            }
            }       
            path.add(root.val); //先进
            if(root.left!=null) //不用root判空
            dfs(list,path,root.left,target-root.val);
            if(root.right!=null)
            dfs(list,path,root.right,target-root.val);
            path.remove(path.size()-1);  //后退
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
编辑 (opens new window)
#Leetcode#二叉树
上次更新: 2023/12/15, 15:49:57
968. 监控二叉树
剑指 Offer 32 - III. 从上到下打印二叉树 III

← 968. 监控二叉树 剑指 Offer 32 - III. 从上到下打印二叉树 III→

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式