二叉树的路径和
来源:互联网 发布:棋牌游戏数据库 编辑:程序博客网 时间:2024/06/05 14:37
题目:
给定一个二叉树,找出所有路径中各节点相加总和等于给定目标值
的路径。
一个有效的路径,指的是从根节点到叶节点的路径。
样例:给定一个二叉树,和 目标值 = 5
:
1 / \ 2 4 / \ 2 3
返回:
[ [1, 2, 2], [1, 4]]
当访问到某一结点时,把该结点添加到vector<int>上,并累加当前结点的值。如果当前结点为叶结点并且当前路径的和刚好等于输入的整数,则当前的路径符合要求,把它添加到vector<vector<int>>。如果当前结点不是叶结点,则继续访问它的子结点。当前结点访问结束后,递归函数将自动回到双亲,重复上述步骤,但要注意将路径上的该结点和路径和中该结点的值删除。
/**
* Definition of TreeNode:* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root the root of binary tree
* @param target an integer
* @return all valid paths
*/
vector<vector<int>>vv;
vector<vector<int>> binaryTreePathSum(TreeNode *root, int target) {
vector<int>v;
int s=0;
find(root,target,v,s);
return P;
}
void find(TreeNode *root,int target,vector<int>v,int s)
{
if(root!=NULL)
{
v.push_back(root->val);
s=s+root->val;
if(s==target&&root->left==NULL&&root->right==NULL)
{
P.push_back(v);
}
if(root->left!=NULL)
{
find(root->left,target,v,s);
}
if(root->right!=NULL)
{
find(root->right,target,v,s);
}
s=s-root->val;
v.pop_back();
}
}
};
感悟:
一开始分别采用递归和非递归的方法做了一下该题,但努力了很久都没有将该题做出来,原因主要在与没有将删除路径上的结点处理好。后来参考了别人的答案才将该题做出。
还需思考用非递归的方法如何处理删除结点的问题。
0 0
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- 二叉树的路径和
- CSS属性大全
- NYOJ-170-网络的可靠性(第三届河南省程序设计大赛C题(思维题))
- hrbust 1794敌兵布阵 树装数组模板题
- 手把手教你如何优化linux服务器
- table表格--合并单元格
- 二叉树的路径和
- [kuangbin带你飞]专题十二 基础DP1 -B
- Ubuntu下启动elasticsearch
- RocketMQ 菜鸟笔记 (一) 认识JMS (Java Message Service)
- Backbone.js快速入门
- 为什么基类的析构函数定义为虚函数
- 如何用Redlock实现分布式锁
- Anaconda在windows平台下的MD5、SHA256校验问题
- Java设计模式之策略模式