[ 力扣257 ] 回溯法求二叉树的所有路径 | 刷题打卡

932 阅读1分钟

题目名称:二叉树的所有路径

题目地址:leetcode-cn.com/problems/bi…

给定一个二叉树,返回所有从根节点到叶子节点的路径。

说明: 叶子节点是指没有子节点的节点。

示例:

输入:

   1
 /   \
2     3
 \
  5

输出: ["1->2->5", "1->3"]

解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3

解法

  • 本地解题思路为回溯法,回溯法最难的部分在于引用值的传递,需要在每次达到条件后清空
  • 但是使用字符串基本类型值,不存在引用类型地址传递,会简化回溯操作流程

一、字符串回溯法

/**
 * @param {TreeNode} root
 * @return {string[]}
 */
var binaryTreePaths = function (root) {
  const res = []
  dep(root, '')
  return res
  function dep(node, path) {
    if (!node) return
    path += node.val + '->'
    if (!node.left && !node.right) {
      res.push(path.slice(0, path.length - 2))
      return
    }
    dep(node.left, path)
    dep(node.right, path)
  }
};

二、数组回溯法

/**
 * @param {TreeNode} root
 * @return {string[]}
 */
var binaryTreePaths1 = function (root) {
  const res = []
  const path = []
  dep(root)
  return res
  function dep(node) {
    if (!node) return
    if (!node.left && !node.right) {
      path.push(node.val)
      res.push(path.join('->'))
      path.pop()
      return
    }
    path.push(node.val)
    dep(node.left)
    dep(node.right)
    path.pop()
  }
};

总结

  • 采用基本类型值在回溯中可以有效简化操作

说明

  1. 本题解已同步leetcode-js-simple/14.[ 257 ] 二叉树的所有路径,可以复制代码进行调试。
  2. 总结出了一套亲测有效的前端无痛刷题项目,有助于算法小白平稳入门,详见leetcode-js-roadmap,希望对从零开始刷题的前端小伙伴们带来帮助~

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情