【剑指Offer】【树】二叉树中和为某一值的路径
题目:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
A:选择前序遍历,因为前序遍历先访问根节点
选择从后向前递归,每次减去当前节点的值,直到遍历到叶子节点,若值减为0则找到了一条路径和,填入listAll中
若当前不是叶子节点 且 剩余的值还未为零,则递归调用该节点的左子树,再递归调用该节点的右子树
若不符合,则删除结点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { private : vector<vector< int > > listAll; vector< int > list; void ifFind(TreeNode * node , int left) { //存入路径list list.push_back(node->val); //是否是叶子节点,且路径和一致 if ((left - node->val == 0) && (node->left == nullptr ) && (node->right == nullptr )) { listAll.push_back(list); //{10,5,7} ==> {10,12} } else { if (node->left) { ifFind(node->left, left - node->val); } if (node->right) { ifFind(node->right, left - node->val); } } list.pop_back(); //{10,5,4} => ture => true } public : vector<vector< int > > FindPath(TreeNode* root, int expectNumber) { //{10,5,4,7,12} if (root != nullptr ) { ifFind(root,expectNumber); } return listAll; } }; |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)