当前位置: 首页 > news >正文

算法通关村第十八关——回溯

回溯很大感觉就是多重递归,在递归的题目中,例如斐波那契数列,只需要考虑当前情况以及他的子情况。而在回溯中,要进行很多次递归,并且要对条件进行处理。

LeetCode257:给你一个二叉树的根节点root,按任意顺序,返回所有从根节点到叶子节点的路径。

叶子节点是指没有子节点的节点。

示例:
输入:root=[1,2,3,nu11,5]
输出:["1->2->5","1->3"]

class BinaryTreePaths {List<String> ans = new ArrayList<>();public List<String> binaryTreePaths(TreeNode root) {dfs(root, new ArrayList<>());return ans;}private void dfs(TreeNode root, List<Integer> temp) {if (root == null) return;temp.add(root.val);// 如果是叶子节点记录结果if (root.left == null && root.right == null) {ans.add(getPathString(temp));}dfs(root.left, temp);dfs(root.right, temp);temp.remove(temp.size() - 1);}// 拼接结果private String getPathString(List<Integer> temp) {StringBuilder sb = new StringBuilder();sb.append(temp.get(0));for (int i = 1; i < temp.size(); i++) {sb.append("->").append(temp.get(i));}return sb.toString();}
}

进入dfs,将当前节点添加到temp列表中,如果是叶子节点,那说明当前分支已经处理完了,像结果列表中添加拼接后的temp列表。

如果不是叶子节点,那么就遍历左子树,右子树,按照前序的顺序来回溯,注意在当前分支结束后,要将最下面的那个节点去掉。

http://www.lryc.cn/news/152821.html

相关文章:

  • 使用kafka还在依赖Zookeeper,kraft模式了解下
  • 【100天精通Python】Day52:Python 数据分析_Numpy入门基础与数组操作
  • Day01-Java基础语法
  • 代码随想录二刷day06
  • 可扩展的Blender插件开发汇总
  • 2023_Spark_实验二:IDEA安装及配置
  • 小赢科技,寻找金融科技核心价
  • NAT与代理服务器
  • 24.排序,插入排序,交换排序
  • Navicat16安装教程
  • 【看表情包学Linux】初识文件描述符 | 虚拟文件系统 (VFS) 初探 | 系统传递标记位 | O_TRUNC | O_APPEND
  • ssm+vue“魅力”繁峙宣传网站源码和论文
  • Linux系统编程5(线程概念详解)
  • leetcode645. 错误的集合(java)
  • Pytest参数详解 — 基于命令行模式
  • 【python爬虫】3.爬虫初体验(BeautifulSoup解析)
  • 【Three.js + Vue 构建三维地球-Part One】
  • Power View
  • SQL查询本年每月的数据
  • C++之struct和union对比介绍
  • 微服务--SkayWalking(链路追踪:国产开源框架)
  • 在Windows 10上部署ChatGLM2-6B:掌握信息时代的智能对话
  • LRU和LFU算法的简单实现
  • OCR多语言识别模型构建资料收集
  • 倍增的经典题目:扩大区间、st表
  • LeetCode——和为K的子数组(中等)
  • Truncation Sampling as Language Model Desmoothing
  • docker安装jenkins
  • 学习pytorch8 土堆说卷积操作
  • pytest自动化测试两种执行环境切换的解决方案