题目:
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.
给定一棵二叉树,然后再给定一个数,判断从这棵二叉树的根节点到叶子节点的路径中的和是否等于这个给定的数。这道题因为必须要遍历每一条从根节点到叶子节点的所有路径,考虑用两个队列分别来存储节点和其节点值。因为这道题有一个比较特殊的地方,就是因为需要保存每一条路径经过的值的和,所以需要用两个队列来分别保存相关的值。然后针对每一种情况,分别来保存相应的值和路径。然后因为每一个当前节点保存的值都不一样,需要单独另计,并且在存入LinkedList时,得注意需要每一个节点与其子节点的关系。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution
{
public boolean hasPathSum(TreeNode root,int sum)
{
if(root == null)
return false;
LinkedList<TreeNode> nodes = new LinkedList<TreeNode>();
LinkedList<Integer> values = new LinkedList<Integer>();
nodes.add(root);
values.add(root.val);
while(!nodes.isEmpty())
{
TreeNode curr = nodes.poll();
int sumvalue = values.poll();
if(curr.left == null && curr.right == null && sumvalue == sum)
{
return true;
}
if(curr.left != null)
{
nodes.add(curr.left);
values.add(curr.left.val + sumvalue);
}
if(curr.right != null)
{
nodes.add(curr.right);
values.add(curr.right.val + sumvalue);
}
}
return false;
}
}可以看到此题与Same Tree有异曲同工之妙,类型都是差不多的,与二叉树相关,而且都是二叉树的典型应用,应该好好理解理解。
本文探讨了如何确定一棵二叉树中是否存在从根节点到叶子节点的路径,该路径上的节点值之和等于给定的目标值。通过使用双队列来记录节点及其累积值,实现了对所有可能路径的有效遍历。
1199

被折叠的 条评论
为什么被折叠?



