问题分类
二叉树路径的问题大致可以分为两类:
1.自顶向下:
顾名思义,就是 从某一个节点(不一定是根节点),从上向下寻找路径,到某一个节点(不一定是叶节点)结束具体问题如下:
- 二叉树的所有路径
面试题 04.12. 求和路径 - 路径总和
- 路径总和 II
- 路径总和 III
- 从叶结点开始的最小字符串
而继续细分的话还可以分成一般路径与给定和的路径
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);
}
# **给定和的路