25-二叉树中和为某一值的路径
来源:互联网 发布:linux查系统版本 编辑:程序博客网 时间:2024/06/14 06:22
首先明确题意,路径是指到叶子节点,中间的加起来和为期望值的不算!
很是不喜欢递归,看评论里面有用非递归的就抄过来参考一下:
//非递归版本//思路:1.按先序遍历把当前节点cur的左孩子依次入栈同时保存当前节点,每次更新当前路径的和sum;2.判断当前节点是否是叶子节点以及sum是否等于expectNumber,如果是,把当前路径放入结果中。3.遇到叶子节点cur更新为NULL,此时看栈顶元素,如果栈顶元素的把栈顶元素保存在last变量中,同时弹出栈顶元素,当期路径中栈顶元素弹出,sum减掉栈顶元素,这一步骤不更改cur的值;4.如果步骤3中的栈顶元素的右孩子存在且右孩子之前没有遍历过,当前节点cur更新为栈顶的右孩子,此时改变cur=NULL的情况。 #include <iostream>#include <vector> using namespace std; struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL){}} vector<vector<int> > FindPath(TreeNode *root, int expectNumber){ vector<vector<int> > res; if (root == NULL) return res; stack<TreeNode *> s; s.push(root); int sum = 0; //当前和 vector<int> curPath; //当前路径 TreeNode *cur = root; //当前节点 TreeNode *last = NULL; //保存上一个节点 while (!s.empty()){ if (cur == NULL){ TreeNode *temp = s.top(); if (temp->right != NULL && temp->right != last){ cur = temp->right; //转向未遍历过的右子树 }else{ last = temp; //保存上一个已遍历的节点 s.pop(); curPath.pop_back(); //从当前路径删除 sum -= temp->val; } } else{ s.push(cur); sum += cur->val; curPath.push_back(cur->val); if (cur->left == NULL && cur->right == NULL && sum == expectNum){ res.push_back(curPath); } cur = cur->left; //先序遍历,左子树先于右子树 } } return res;}
下面是递归的解法:先码过来把:
链接:https://www.nowcoder.com/questionTerminal/b736e784e3e34731af99065031301bca来源:牛客网class Solution { vector<vector<int> >allRes; vector<int> tmp; void dfsFind(TreeNode * node , int left){ tmp.push_back(node->val); if(left-node->val == 0 && !node->left && !node->right) allRes.push_back(tmp); else { if(node->left) dfsFind(node->left, left-node->val); if(node->right) dfsFind(node->right, left-node->val); } tmp.pop_back(); }public: vector<vector<int> > FindPath(TreeNode* root,int expectNumber) { if(root) dfsFind(root, expectNumber); return allRes; }};
阅读全文
0 0
- 25 - 二叉树中和为某一值的路径
- 25 二叉树中和为某一值的路径
- 25-二叉树中和为某一值的路径
- 【树】二叉树中和为某一值的路径
- 【树6】二叉树中和为某一值的路径
- 题目11:二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的所有路径
- 题目1368:二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 1368:二叉树中和为某一值的路径 @jobdu
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- JD_java_discompiler
- Oozie API调用Hue JOB
- 常见的QT错误
- opencv中图像基础(大小,深度,通道)
- jquery的Ajax
- 25-二叉树中和为某一值的路径
- 【计网】HTTP与WebSocket的区别
- QT生成静态动态库
- 树:二叉树几种形态(满二叉,完全二叉,线索二叉,二叉排序,平衡二叉,哈夫曼)
- httpclient中禁止301、302自动重定向
- Student s = new Student();在内存中做了哪些事情?
- ZOJ Problem Set
- Linux静态库和动态库区别
- sql语句整理1--统计当月签到次数最多