LeetCode---Path Sum II
来源:互联网 发布:c语言输出*等腰三角形 编辑:程序博客网 时间:2024/06/06 09:11
题目大意:给出一个二叉树和一个从根节点到叶子节点的路径和,找出二叉树中所有满足要求的路径。
算法思想:
先序遍历整个二叉树,遍历的同时记录下当前所遍历过的节点,及当前路径和,当遍历到根节点时判断路径和是否满足要求,若不满足,则从路径节点中移除该节点同时路径和也相应的减少,如果满足要求则记录下当前路径,同时设置回溯标记以便来记录下一条满足要求的路径,按照此过程直到整个二叉树遍历结束。
说明:1.先序遍历设置的栈中节点存放当前节点和它的父亲节点。2.取栈顶元素后,若遇到回溯标记则将记录大路径回溯到当前节点的父亲节点。
代码如下:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<vector<int> > res; if(root==NULL) return res; vector<int> tmp; vector<TreeNode*> nodes; stack<pair<TreeNode*,TreeNode*> > S; bool flag=false; int node_sum=0; pair< TreeNode*, TreeNode*> cur; S.push(make_pair(root,( TreeNode*)NULL)); while(!S.empty()){ cur=S.top(); S.pop(); if(flag){ while(cur.second!=nodes.back()){ node_sum-=tmp.back(); nodes.pop_back(); tmp.pop_back(); } flag=false; } tmp.push_back(cur.first->val); nodes.push_back(cur.first); node_sum+=cur.first->val; if(cur.first->right==NULL&&cur.first->left==NULL){ if(node_sum==sum) res.push_back(tmp); tmp.pop_back(); nodes.pop_back(); node_sum-=cur.first->val; flag=true; } if(cur.first->right!=NULL) S.push(make_pair(cur.first->right,cur.first)); if(cur.first->left!=NULL) S.push(make_pair(cur.first->left,cur.first)); } return res; }};
0 0
- LeetCode: Path Sum II
- LeetCode Path Sum II
- [Leetcode] Path Sum II
- LeetCode: Path Sum II
- [LeetCode] Path Sum II
- 【leetcode】Path Sum II
- [LeetCode]Path Sum II
- [Leetcode]Path Sum II
- [leetcode]Path Sum II
- Leetcode: Path Sum II
- LeetCode-Path Sum II
- [leetcode] Path Sum II
- LeetCode - Path Sum II
- [LeetCode] Path Sum II
- Leetcode Path Sum II
- LeetCode | Path Sum II
- 【leetcode】Path Sum II
- [LeetCode] Path Sum II
- Virtualbox WDDM 用户模式显示驱动之vboxWddmDispGetCaps
- 运用SEL,运行时改变两个方法的实现
- C# 微信企业号--管理素材文件
- JavaScript中类和构造函数的理解
- mac 系统office软件
- LeetCode---Path Sum II
- 如何获取清单文件AndroidManifest中meta_data元素的信息
- Java 命名空间的由来和引入
- python-swap函数复制与赋值
- 强命名程序集
- VWare虚拟机安装OS X
- 自定义 push 和 pop 实现有趣的相册翻开效果(上)
- Android的分类ListView
- Android根据屏幕宽度缩放图片