Path Sum
来源:互联网 发布:制作印章软件 编辑:程序博客网 时间:2024/05/29 23:25
【题目描述】
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
For example:Given the below binary tree and
sum = 22
,5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2
which sum is 22.
分别实现了非递归和递归。
递归比较容易,用dfs就可以了。
非递归:使用两个堆栈,一个记录节点,一个记录到当前节点的路径节点总和与sum的差,当sum为0且该节点的左右子树均为空时为true。
【代码】
递归:
class Solution {public: bool hasPathSum(TreeNode* root, int sum) { return pathsum(root,sum,0); }bool pathsum(TreeNode* node,int sum,int nowsum){ if(node==NULL) return false; if(node->left==NULL&&node->right==NULL) { if(nowsum+node->val==sum) return true; else return false; } return pathsum(node->left,sum,nowsum+node->val)||pathsum(node->right,sum,nowsum+node->val); }};
非递归:
/** * 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: bool hasPathSum(TreeNode* root, int sum) { stack<TreeNode*> s; stack<int> snum; if(root==NULL) return false; s.push(root); snum.push(sum); while(!s.empty()){ TreeNode* node=s.top(); sum=snum.top()-node->val; s.pop(); snum.pop(); if(sum==0&&node->left==NULL&&node->right==NULL) return true; if(node->left){ if(node->right) {s.push(node->right);snum.push(sum);} s.push(node->left); snum.push(sum); } else if(node->right){ s.push(node->right); snum.push(sum); } } return false; }};
0 0
- Path Sum && Path Sum ||
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- Path Sum
- hadoop 笔记之naomenode 中metadata物理结构
- List To Tree 及遍历Tree
- DDL DML DCL语句
- nefu1018数字游戏二【DP】
- 关于ZendStudio网页编码UTF-8和GB2312的问题
- Path Sum
- 数据库之DDL&DCL&DML浅析
- 难经6:小心,SpringAOP声明式事务的一个缺陷
- iOS之浅谈视图控制器的生命周期
- lintcode-二叉查找树中搜索区间-11
- 排序算法记录
- 只用递归函数和栈操作实现一个栈的逆序
- 构造与set和get的使用
- oracle登陆报错:ORA-28000: the account is locked