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


    题目

    给你一个二叉树的根节点 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
  • 相关阅读:
    学习MySQL-第二章
    图文并茂演示小程序movable-view的可移动范围
    前端:练习页面,(致美页面练习)
    Spring(三)
    QT总结汇总
    Java-面向对象之(抽象类+接口)
    复杂AB实验
    linux 搭建mycat
    漏电继电器 JELR-(120)FG AC220V 零序电流互感器 孔径φ45 上海约瑟
    web前端-javascript-逻辑运算符(! 非取反,短路的&& 与,短路的|| 或,&& || 非布尔值的情况,对于非布尔值进行与或运算时,会先将其转换为布尔值,然后再运算,并且返回)
  • 原文地址:https://blog.csdn.net/qq_39473176/article/details/127813038