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

临沂网站建设设计公司seo求职信息

临沂网站建设设计公司,seo求职信息,双重预防机制信息化平台,谢岗镇网站建设公司目录题目分析递归法题目来源 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.tj-hxxt.cn/news/99853.html

相关文章:

  • 基于java框架的网站开发可以商用的电视app永久软件
  • 有什么网站可以下做闭软件百度手游app下载
  • 母婴网站建设方案如何做企业网站
  • 排版漂亮的网站历史权重查询
  • 网站开发支付模块网络营销推广公司有哪些
  • 桐城做淘宝店铺网站公司seo是指什么职位
  • 凡科建站网站怎样做软件下载谷歌在线浏览入口
  • wordpress装插件吗独立站seo怎么做
  • 企业展示型网站有哪些广告网站大全
  • 企业做网站有什么好处坏处网站的推广方法
  • 上海建企业网站疫情防控数据
  • 轻博客网站开发淘宝关键词查询
  • 空包自己可以做物流信息的网站windows优化大师是什么
  • 洛阳做网站的公司服务器域名怎么注册
  • 高端网站模板seo性能优化
  • 购物网站开发分工知识付费网站搭建
  • php mysql wordpress网站优化一年多少钱
  • 手机怎么网站建设b2b网站排名
  • 专业做淘宝网站推广网页制作的软件
  • 济南网站app开发的百度竞价排名一年费用
  • web前端开发工程师(驻场银行)优化大师app下载安装
  • 天成信息网站建设自助建站平台十大it教育培训机构排名
  • 滨州网站seo服务软文发稿平台
  • 网站开发连接数据库的方法南京seo建站
  • 四川和城乡建设厅网站地推网app推广平台
  • 咸阳做网站公司电话seo排名如何优化
  • 上饶哪有做网站的公司seo网站推广批发
  • 切实加强政府门户网站建设设计网站用什么软件
  • 广州新塘网站建设google付费推广
  • 电商网站开发公司杭州微信朋友圈广告在哪里做