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

豆芽网站建设 优帮云百度app下载官方免费下载最新版

豆芽网站建设 优帮云,百度app下载官方免费下载最新版,wordpress标签后缀名html,wordpress文字默认颜色目录题目分析递归法题目来源 257. 二叉树的所有路径 题目分析 前序遍历以及回溯的过程如图: 递归法 1.递归函数参数以及返回值 要传入根节点,记录每一条路径的path,和存放结果集的result,这里递归不需要返回值,代…

目录

    • 题目分析
    • 递归法

题目来源
257. 二叉树的所有路径

题目分析

前序遍历以及回溯的过程如图:
在这里插入图片描述

递归法

  • 1.递归函数参数以及返回值

要传入根节点,记录每一条路径的path,和存放结果集的result,这里递归不需要返回值,代码如下:

void traversal(TreeNode root, List<Integer> paths, List<String> res)
  • 2.确定递归终止条件

在写递归的时候都习惯了这么写:

if (root == null) {终止处理逻辑
}

但是本题的终止条件这样写会很麻烦,因为本题要找到叶子节点,就开始结束的处理逻辑了(把路径放进result里)。
那么什么时候算是找到了叶子节点? 是当 root不为空,其左右孩子都为空的时候,就找到叶子节点。
所以本题的终止条件是:

if (root.left == null&& root.right == null) {终止处理逻辑
}

这里我们先使用List结构的path容器来记录路径,那么终止处理逻辑如下:

  if (root.left == null && root.right == null) {// 输出StringBuilder sb = new StringBuilder();// StringBuilder用来拼接字符串,速度更快for (int i = 0; i < paths.size() - 1; i++) {sb.append(paths.get(i)).append("->");}sb.append(paths.get(paths.size() - 1));// 记录最后一个节点res.add(sb.toString());// 收集一个路径return;}
  • 3.确定单层递归逻辑

因为是前序遍历,需要先处理中间节点,中间节点就是我们要记录路径上的节点,先放进path中。

paths.add(root.val);// 前序遍历,中

然后是递归和回溯的过程,上面说过没有判断root是否为空,那么在这里递归的时候,如果为空就不进行下一层递归了。
所以递归前要加上判断语句,下面要递归的节点是否为空,如下

        if (root.left != null) { // 左traversal(root.left, paths, res);}if (root.right != null) { // 右traversal(root.right, paths, res);}

此时还没完,递归完,要做回溯啊,因为path 不能一直加入节点,它还要删节点,然后才能加入新的节点。
那么回溯要怎么回溯呢,一些同学会这么写,如下:

        if (root.left != null) { // 左traversal(root.left, paths, res);}if (root.right != null) { // 右traversal(root.right, paths, res);}paths.remove(paths.size() - 1);// 回溯

这个回溯就有很大的问题,我们知道,回溯和递归是一一对应的,有一个递归,就要有一个回溯,这么写的话相当于把递归和回溯拆开了, 一个在花括号里,一个在花括号外。
所以回溯要和递归永远在一起,世界上最遥远的距离是你在花括号里,而我在花括号外!
那么代码应该这么写:

        // 递归和回溯是同时进行,所以要放在同一个花括号里if (root.left != null) { // 左traversal(root.left, paths, res);paths.remove(paths.size() - 1);// 回溯}if (root.right != null) { // 右traversal(root.right, paths, res);paths.remove(paths.size() - 1);// 回溯}

整体代码如下

class Solution {/*** 递归法*/public List<String> binaryTreePaths(TreeNode root) {List<String> res = new ArrayList<>();// 存最终的结果if (root == null) {return res;}List<Integer> paths = new ArrayList<>();// 作为结果中的路径traversal(root, paths, res);return res;}private void traversal(TreeNode root, List<Integer> paths, List<String> res) {paths.add(root.val);// 前序遍历,中// 遇到叶子结点if (root.left == null && root.right == null) {// 输出StringBuilder sb = new StringBuilder();// StringBuilder用来拼接字符串,速度更快for (int i = 0; i < paths.size() - 1; i++) {sb.append(paths.get(i)).append("->");}sb.append(paths.get(paths.size() - 1));// 记录最后一个节点res.add(sb.toString());// 收集一个路径return;}// 递归和回溯是同时进行,所以要放在同一个花括号里if (root.left != null) { // 左traversal(root.left, paths, res);paths.remove(paths.size() - 1);// 回溯}if (root.right != null) { // 右traversal(root.right, paths, res);paths.remove(paths.size() - 1);// 回溯}}
}

在这里插入图片描述

http://www.yidumall.com/news/81821.html

相关文章:

  • wordpress 数据库sqlseo数据监控平台
  • 外贸营销邮件范文西安seo外包优化
  • 做企业网站找谁网络营销 长沙
  • wordpress主题 移动端做网站优化哪家公司好
  • 廊坊网站制作网站建设的技术支持
  • ipv6在家做网站世界十大网站排名
  • 河南做外贸网站的公司种子搜索引擎在线
  • 哪个网站是专门做兼职的网络营销策略名词解释
  • 做外贸纱线用什么网站网站seo诊断报告怎么写
  • 网页制作网站建设公司站长工具查询入口
  • asp动态网站开发基础教程(第4版)百度推广怎么登录
  • 技术支持 网站建设全能优化大师
  • 珠海网站seo福州网络推广运营
  • crm客户管理系统下载长沙好的seo外包公司
  • 外包公司做网站seo零基础教学视频
  • 谁可以做综合性网站优化防疫政策
  • 盈江城乡建设局网站seo博客大全
  • 企业做网站的痛点有哪些重庆森林经典台词罐头
  • dreamwearver做网站地图关键词排名查询工具
  • 电影里的做视频在线观看网站最近一周的时政热点新闻
  • 网站专题分类互联网关键词优化
  • 深圳上市公司网站建设关键词优化心得
  • 咸阳哪里做网站嘉兴优化公司
  • 网站建设微信营销知乎关键词排名优化
  • 个人免费网站开发青岛网站建设公司排名
  • 刚做的网站 为啥搜不到怎样免费制作网页
  • 深圳南山做网站青岛网站排名提升
  • 太原疫情谷歌优化教程
  • 网站建设排名优化公司seo监控系统
  • 自己做的网站打不开是什么原因网络营销案例分析ppt