[LeetCode]Path Sum II

本文介绍了如何在一个给定的二叉树中找到所有路径,这些路径从根节点到叶子节点且路径上的节点值之和等于指定的数。通过逐步分析和递归算法实现这一目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.

For example:
Given the below binary tree and sum = 22,
              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1

return

[
   [5,4,11,2],
   [5,8,4,5]
]
给出二叉树中路径值等于给定数的所有路径。

解题思路


按以下步骤进行:
  1. root == null,则返回空list;
  2. root是叶子节点,如果root.val == sum,返回添加有root的list,否则返回空list;
  3. 如果root不是叶子节点 && root.left!=null,得到leftList = pathSum(root.left, sum - root.val),遍历leftList,进行操作add(0, root.val),遍历完成后将leftList赋值给list;
  4. 如果root不是叶子节点 && root.right!=null,得到rightList = pathSum(root.right, sum - root.val),遍历rightList,进行操作add(0, root.val),同时在每次循环中list进行add新的rightList元素的操作;
  5. 返回list。

代码

	public static ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
		ArrayList<ArrayList<Integer>> allList = new ArrayList<ArrayList<Integer>>();
		ArrayList<Integer> list = new ArrayList<Integer>();
		if (root == null) {
			return allList;
		}

		if (root.left == null && root.right == null) {
			if (root.val == sum) {
				list.add(root.val);
				allList.add(list);
			}
			return allList;
		}
		
		if (root.left != null) {
			ArrayList<ArrayList<Integer>> leftList = pathSum(root.left, sum - root.val);
			if (leftList!=null && leftList.size()>0) {
				for(ArrayList<Integer> child:leftList){
					child.add(0, root.val);
				}
				allList = leftList;
			} 
		} 
		
		if(root.right != null){
			ArrayList<ArrayList<Integer>> rightList = pathSum(root.right, sum - root.val);
			if (rightList!=null && rightList.size()>0) {
				for(ArrayList<Integer> child:rightList){
					child.add(0, root.val);
					allList.add(child);
				}
			} 
		}
		return allList;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值