【树结构与栈】中等力扣练习题

二叉树中和为目标值的路径

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

示例 1:

复制代码
输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]

提示:

  • 树中节点总数在范围 [0, 5000] 内

  • -1000 <= Node.val <= 1000

  • -1000 <= targetSum <= 1000

    /**

    • 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 {
      List<List> ret = new LinkedList<List>();
      //存储路径的队列
      Deque path = new LinkedList();

      public List<List> pathSum(TreeNode root, int target) {
      //二叉树
      dfs(root, target);
      return ret;
      }

      public void dfs(TreeNode root, int target) {
      //根节点为空
      if (root == null) {
      return;
      }
      path.offerLast(root.val);
      target -= root.val;
      //子节点为空
      if (root.left == null && root.right == null && target == 0) {
      ret.add(new LinkedList(path));
      }
      //遍历左子树
      dfs(root.left, target);
      //遍历右子树
      dfs(root.right, target);
      path.pollLast();
      }
      }

彩灯装饰记录I

一棵圣诞树记作根节点为 root 的二叉树,节点值为该位置装饰彩灯的颜色编号。请按照从 左 到 右 的顺序返回每一层彩灯编号。

复制代码
输入:root = [8,17,21,18,null,null,6]
输出:[8,17,21,18,6]

提示:

  1. 节点总数 <= 1000

    /**

    • Definition for a binary tree node.
    • public class TreeNode {
    • 复制代码
      int val;
    • 复制代码
      TreeNode left;
    • 复制代码
      TreeNode right;
    • 复制代码
      TreeNode(int x) { val = x; }
    • }
      */
      class Solution {
      ArrayList a=new ArrayList();
      public int[] levelOrder(TreeNode root) {
      Queue q=new LinkedList();
      //根节点为空
      if(root==null) return new int[0];
      //添加根节点
      q.add(root);
      //当队列中存储的节点不为空时,进行遍历
      while(!q.isEmpty()){
      TreeNode t=q.poll();
      //添加节点的数值
      a.add(t.val);
      //左边子节点不为空
      if(t.left!=null) q.add(t.left);
      //右边子节点不为空
      if(t.right!=null) q.add(t.right);
      }
      int[] re= new int[a.size()];
      //遍历查询列表中的值
      for(int i=0;i<a.size();i++){
      re[i]=a.get(i);
      }
      return re;
      }

    }

验证图书取出顺序

现在图书馆有一堆图书需要放入书架,并且图书馆的书架是一种特殊的数据结构,只能按照 一定 的顺序 放入 和 拿取 书籍。

给定一个表示图书放入顺序的整数序列 putIn,请判断序列 takeOut 是否为按照正确的顺序拿取书籍的操作序列。你可以假设放入书架的所有书籍编号都不相同。

示例 1:

**输入:**putIn = 6,7,8,9,10,11, takeOut = 9,11,10,8,7,6

**输出:**true

**解释:**我们可以按以下操作放入并拿取书籍: push(6), push(7), push(8), push(9), pop() -> 9, push(10), push(11),pop() -> 11,pop() -> 10, pop() -> 8, pop() -> 7, pop() -> 6

示例 2:

复制代码
输入:putIn = [6,7,8,9,10,11], takeOut = [11,9,8,10,6,7]
输出:false
解释:6 不能在 7 之前取出。

提示:

  • 0 <= putIn.length == takeOut.length <= 1000

  • 0 <= putIn[i], takeOut < 1000

  • putIn 是 takeOut 的排列。

    class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
    //创建栈
    Stack p1=new Stack();
    Stack p2=new Stack();
    int pop=0;
    for(int i=0;i<pushed.length;i++){
    //插入数值
    p1.push(pushed[i]);
    //只要查询的栈内数值不为空,或栈顶数值与取出的数值不相符时,进行循环
    while(!p1.isEmpty()&&popped[pop]==p1.peek()){
    //弹出数值
    p1.pop();
    pop++;
    }
    }
    //根据p1是否为空,判断取出顺序是否一致
    return p1.isEmpty();
    }
    }

相关推荐
小郎君6586 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧6 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
hold?fish:palm6 小时前
40 二叉树的直径
c++·leetcode
Shimeri6 小时前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
Evand J7 小时前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
guo_wen_qiang7 小时前
二叉树的层序遍历-使用双端队列Deque
算法·leetcode·1024程序员节
爱读书的小胖7 小时前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节
CCblandy7 小时前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化
上班摸鱼下班游戏7 小时前
Unity 仿生智能算法 从蚁群算法 开始
算法·unity·游戏引擎
pipixia200337 小时前
C++ 面试高频:namespace 的 6 个知识点,从 using 到匿名命名空间
c语言·学习·算法·嵌入式·命名空间·c++面试·匿名命名空间