简单算法 二叉树中是否存在节点和为指定值的路径(java)
描述
给定一个二叉树和一个值\ sum sum,判断是否有从根节点到叶子节点的节点值之和等于\ sum sum 的路径,
例如:
给出如下的二叉树
返回true,因为存在一条路径 5\to 4\to 11\to 25→4→11→2的节点值之和为 22
public boolean hasPathSum (TreeNode root, int sum) {
if(root == null ) return false;
Stack<Integer> s1 = new Stack<Integer>();
Stack<TreeNode> s2 = new Stack<>();
ArrayList<Integer> list = new ArrayList<>();
s2.push(root);
s1.push(root.val);
while(!s2.isEmpty()){
TreeNode node = s2.pop();
int value = s1.pop();
if(node.left == null && node.right == null){
list.add(value);
}else{
if(node.right != null){
s1.push(node.right.val + value);
s2.push(node.right);
}
if(node.left != null){
s1.push(node.left.val + value);
s2.push(node.left);
}
}
}
for(int i = 0 ; i < list.size(); i++){
if(sum == list.get(i))
return true;
}
return false;
}