二叉树路径问题(一网打尽)

这篇博客介绍了二叉树路径问题的两种主要类型:自顶向下和非自顶向下,并提供了解题模板。自顶向下问题包括路径总和等,非自顶向下如最长路径等,通常使用DFS解决。文中以路径总和II为例,解释了如何找到从根节点到叶子节点路径总和等于给定目标和的路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题分类
二叉树路径的问题大致可以分为两类:

1.自顶向下:

顾名思义,就是 从某一个节点(不一定是根节点),从上向下寻找路径,到某一个节点(不一定是叶节点)结束具体问题如下:

  1. 二叉树的所有路径
    面试题 04.12. 求和路径
  2. 路径总和
  3. 路径总和 II
  4. 路径总和 III
  5. 从叶结点开始的最小字符串
    而继续细分的话还可以分成一般路径与给定和的路径

2、非自顶向下:

就是从任意节点到任意节点的路径,不需要自顶向下
124. 二叉树中的最大路径和
687. 最长同值路径
543. 二叉树的直径

解题模板
这类题通常用深度优先搜索(DFS)和广度优先搜索(BFS)解决,BFS较DFS繁琐,这里为了简洁只展现DFS代码

一、自顶而下

dfs

一般路径:
vector<vector<int>>res;
void dfs(TreeNode*root,vector<int>path)
{
    if(!root) return;  //根节点为空直接返回
    path.push_back(root->val);  //作出选择
    if(!root->left && !root->right) //如果到叶节点  
    {
        res.push_back(path);
        return;
    }
    dfs(root->left,path);  //继续递归
    dfs(root->right,path);
}

# **给定和的路径:**
void dfs(TreeNode*root, int sum, vector<int&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值