首页 > 试题广场 >

二叉树根节点到叶子节点的所有路径和

[编程题]二叉树根节点到叶子节点的所有路径和
  • 热度指数:78312 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个二叉树的根节点root,该树的节点值都在数字 之间,每一条从根节点到叶子节点的路径都可以用一个数字表示。
1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点
2.叶子节点是指没有子节点的节点
3.路径只能从父节点到子节点,不能从子节点到父节点
4.总节点数目为n

例如根节点到叶子节点的一条路径是,那么这条路径就用 来代替。
找出根节点到叶子节点的所有路径表示的数字之和
例如:

这颗二叉树一共有两条路径,
根节点到叶子节点的路径 用数字 代替
根节点到叶子节点的路径 用数字 代替
所以答案为

数据范围:节点数 ,保证结果在32位整型范围内
要求:空间复杂度 ,时间复杂度
进阶:空间复杂度 ,时间复杂度 
示例1

输入

{1,2,3}

输出

25
示例2

输入

{1,0}

输出

10
示例3

输入

{1,2,0,3,4}

输出

257

说明:本题目包含复杂数据结构TreeNode,点此查看相关信息
头像 数据结构和算法
发表于 2021-07-19 22:05:15
精华题解 1,DFS解决 这题说的是每条从根节点到叶子结点的路径都代表一个数字,然后再把这些数字加起来即可。遍历一棵树从根节点到叶子结点的所有路径,最容易想到的是DFS,所以这题使用DFS是最容易解决的。如果对二叉树的DFS不熟悉的话,可以看下373,数据结构-6,树 解决方式就是从根节点往下走的时候,那么 展开全文
头像 Maokt
发表于 2021-07-05 14:52:17
精华题解 算法思想一:深度优先搜索 解题思路: 二叉树的每条从根节点到叶子节点的路径都代表一个数字。其实,每个节点都对应一个数字,等于其父节点对应的数字乘以 10 再加上该节点的值(这里假设根节点的父节点对应的数字是 0)。只要计算出每个叶子节点对应的数字,然后计算所有叶子节点对应的路径之和,即可 展开全文
头像 Gemini48
发表于 2021-07-08 15:48:17
精华题解 分析 每条从根到叶子节点的路径都代表一个数字 寻找的是符合条件的所有路径之和 解法一:深度优先遍历(DFS) 思路步骤: 每一个结点对应的数字=其父节点对应数字*10加上该结点的值 假设根节点的父亲节点对应的数字为0 计算出每一个叶子节点对应的数字 计算所有叶子节点对应的数字之和 图解 展开全文
头像 牛一霸
发表于 2021-07-02 23:55:45
精华题解 题目:二叉树根节点到叶子节点的所有路径和 描述:给定一个仅包含数字0−9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是1→2→3,那么这条路径就用123来代替。 找出根节点到叶子节点的所有路径表示的数字之和 例如:这颗二叉树一共有两条路径,根节点 展开全文
头像 leaves0924
发表于 2021-07-17 13:58:54
精华题解 题目描述 给定一个仅包含数字0-9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是 1→2→3,那么这条路径就用 123 来代替。找出根节点到叶子节点的所有路径表示的数字之和例如:这颗二叉树一共有两条路径,根节点到叶子节点的路径 1→2 用数字 12 代 展开全文
头像 Peterliang
发表于 2021-07-16 13:27:42
精华题解 题意分析 这个题目就是要我们找出从根结点到叶子结点的所有的数字,然后我们需要将这些数字拼接成一个数,将所有的数相加起来就是我们的答案了。 前置知识,DFS。对于DFS我们可以想象成一棵树,我们需要不断递归到树的最下面的叶子节点。 思路分析 思路一 DFS 我们对整棵二叉树进行递归操作,同时 展开全文
头像 华科不平凡
发表于 2020-08-21 16:16:25
毋庸置疑,用先序遍历。但是实现起来却有点问题。刚开始我用一个string类型变量保存路径上所有数字,用一个int &sum保存结果,但是只通过了95%。后面发现其实可以直接通过一个数字传递路径上数字和,遇到叶节点返回左右子树相加的结果即可。 class Solution { public: 展开全文
头像 下一次什么时候可以修改昵称
发表于 2020-10-29 14:11:07
算法 1.递归 2.重载一个函数sumNumbers(TreeNode root, int sum)表示计算到root节点为止的sum值 3.当左右子节点都为null时,是叶子节点,返回sum 4.当左或右子节点不为null时,不是叶子节点,递归计算左或右子节点的sum值 public int 展开全文
头像 牛客983371096号
发表于 2021-11-10 10:24:19
# class TreeNode: #     def __init__(self, x): #         sel 展开全文
头像 mm马mm
发表于 2021-04-28 20:25:30
dfs遍历每一个节点,时间复杂度O(n),因为每个节点只遍历一次,空间复杂度取决于递归的深度,最坏为O(n)。 import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null 展开全文
头像 不经历怎么能成长
发表于 2021-07-21 16:00:09
class Solution { public: int res = 0; //全局变量保存所有路径相加和 int sumNumbers(TreeNode* root) { dfs(root, 0); return res; } voi 展开全文
头像 天刚刚破晓
发表于 2021-09-13 15:40:33
1. 首先遍历二叉树 将根节点到叶子结点的路径都保存下来,利用一个ArrayList<ArrayList<character>> paths 保存下</character> public void findPaths(TreeNode root, ArrayLis 展开全文
头像 愚阳
发表于 2022-05-18 19:58:52
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿 展开全文
头像 youxiwang
发表于 2022-01-21 16:21:45
DFS DFS时传递parentSum, childSum = parentSum*10 + child.val 时间O(n): 每个node访问一次 空间O(n): 因为是recursion,worst-case树是长条 所有node都在栈上 public class Solution { 展开全文
头像 独饮心上秋要实习
发表于 2022-01-17 23:42:41
c语言 * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; * * C语言声明定义全局变量请加上static,防止重复定义 */ /** * 代码中的类名、方法 展开全文
头像 改变眼泪的理由
发表于 2022-08-02 12:36:39
普通版的思路……时间复杂度比较高     //这道题的本质是让我们记录每一条从根到叶子的路径     //思路是用栈来做,每抵达一个叶子节点时,就把它从栈中弹出,然后访问栈顶    &n 展开全文

问题信息

难度:
265条回答 33534浏览

热门推荐

通过挑战的用户