LeetCode129.求根到叶子结点数字之和(Java+递归)

该博客讲述了如何解决一个关于二叉树的问题,即计算从根节点到所有叶子节点的路径数字之和。作者选择了前序遍历的方法,并通过递归实现。在递归过程中,遇到叶子节点时将路径和加入总和,遇到非叶子节点则继续遍历其左右子节点,同时更新路径数字。作者反思了自己的解题过程,认为虽然代码较长,但这是提升技能的良好机会,并设定了继续学习的目标。
摘要由CSDN通过智能技术生成

题目

给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。
例如,从根到叶子节点路径 1->2->3 代表数字 123。
计算从根到叶子节点生成的所有数字之和。
说明: 叶子节点是指没有子节点的节点。

示例:
在这里插入图片描述

思路

看一眼题目,第一印象:肯定要遍历二叉树,我选择前序遍历。

  • 理解题目:找出根结点到叶子结点的所有路径上数字相加之和——>简称路径和,注意,这里不是简单的把每个结点上的数字相加,而是顺着根结点,到叶子结点,所连成的一个整数,我们求解过程中应注意数字所处在哪一位(百位/十位/个位),从而进行变换。
  • 采取的算法:递归。

结束条件:

  1. 当root==null,说明无结点可走,return;
  2. 当root.left==null && root.right ==null,说明当前结点为叶子结点,应当将对该路径求和的结果累加起来。

递归内容:

  1. 若root.left !=null,则可以遍历左结点
  2. 若root.right!=null,则可以遍历右结点
  • 细节/难点:如何计算每条路径数字之和
public class SumRootToLeafNumbers {
	int sum;

	public int sumNumbers(TreeNode root) {
		if (root == null) {
			return 0;
		}
		preOrder(root, root.val);
		return sum;
	}

	public void preOrder(TreeNode root, int tempSum) {
		if (root == null) {
			return;
		}
		if (root.left == null && root.right == null) {
			sum += tempSum;
		}
		if (root.left != null) {
			preOrder(root.left, tempSum * 10 + root.left.val);
		}
		if (root.right != null) {
			preOrder(root.right, tempSum * 10 + root.right.val);
		}

	}
}

做题反思

这道题对于只刷过三道树的题目的小白来说(我),真的难呀,我太菜了,绕半天,写了很长的代码,结果有什么用呢?思维不严谨,逻辑稀里糊涂的,失败失败。
目标:刷50道树的题!
(等我刷完数组和字符串哒,先往后排一排)
选择现阶段适合自己的,或者稍有难度的训练自己即可,太难了,反而心态都不好。
等时机成熟了,自己回头来看的时候,就会发现这些真的是好简单啊~
加油!冲冲冲

end.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值