• 代码随想录——求根节点到叶节点数字之和


    题目

    给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字:

    例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。 计算从根节点到叶节点生成的 所有数字之和 。

    叶节点 是指没有子节点的节点。
    在这里插入图片描述
    输入:root = [1,2,3]
    输出:25
    解释:
    从根到叶子节点路径 1->2 代表数字 12
    从根到叶子节点路径 1->3 代表数字 13
    因此,数字总和 = 12 + 13 = 25
    在这里插入图片描述
    输入:root = [4,9,0,5,1]
    输出:1026
    解释:
    从根到叶子节点路径 4->9->5 代表数字 495
    从根到叶子节点路径 4->9->1 代表数字 491
    从根到叶子节点路径 4->0 代表数字 40
    因此,数字总和 = 495 + 491 + 40 = 1026

    思路

    本题中,每个节点都对应一个数字,等于其父节点对应的数字乘以10再加上该节点的值,只要计算出每个叶子结点对应的数字,然后计算所有叶子节点对应的数字之和,即可得到结果。

    深度优先搜索(DFS)

    从根节点开始,遍历每个节点,如果遇到叶子节点,则将叶子节点对应的数字加到数字之和。如果当前节点不是叶子节点,则计算其子节点对应的数字,然后对子节点递归遍历

    在这里插入图片描述
    Java代码如下:

    //深搜其实类似于回溯法
    class Solution {
    	int sum = 0;//记录所有叶子结点的数字之和
    	public int sumNumbers(TreeNode root){
    		dfs(root,0);
    		return sum;
    	}
    	
    	public void dfs(TreeNode root, int prevSum){
    		if(root == null){
    			return;
    		}
    		int curSum = prevSum * 10 + root.val;//记录每个叶子节点最终代表的数字
    		if(root.left == null && root.right == null){//如果遇到了叶子结点,则返回当前对应的数字,并累加到sum中
    			sum += curSum;
    			return;
    		}
    		//递归处理左右节点,并累加所有叶子结点的数字
    		if(root.left != null) dfs(root.left,curSum);
    		if(root.right != null) dfs(root.right,curSum);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    2023国家网安周 | 开源网安点亮多地,播撒安全意识之种
    UE5 CommonUI的使用(附源码版)
    浅述青犀AI算法人体攀爬行为检测的应用场景及解决方案
    Map接口实现类的特点
    LAL v0.32.0发布,更好的支持纯视频流
    C++的介绍与认识
    生产报工管理系统可以帮助企业解决哪些问题?
    C# - readonly 和 const 关键字
    软件企业需要每年年审吗?
    从头开始进行CUDA编程:线程间协作的常见技术
  • 原文地址:https://blog.csdn.net/qq_39473176/article/details/127813038