LeetCode Path Sum

本文探讨了如何确定一棵二叉树中是否存在从根节点到叶子节点的路径,该路径上的节点值之和等于给定的目标值。通过使用双队列来记录节点及其累积值,实现了对所有可能路径的有效遍历。

题目:

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有异曲同工之妙,类型都是差不多的,与二叉树相关,而且都是二叉树的典型应用,应该好好理解理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值