首页 > 其他分享 >【力扣每日一题】129. 求根到叶子节点数字之和

【力扣每日一题】129. 求根到叶子节点数字之和

时间:2023-05-24 15:08:20浏览次数:45  
标签:int sum tempNode 力扣 add 129 null root 求根


不得不说,憨憨脑袋没有递归~~~

1. 题目描述

2. 题目分析

  • 题目意思很简单,遍历树的每一条路径,然后相加,返回最后结果
  • 思路一:DFS【每次看代码就秒懂,自己每次都想不到】:递递归归,莫有脑袋。每次递归加上从一开始的值
  • 思路二:BFS【个人最喜欢的】:维护两个队列,队列一存放root,队列二存放val,每次遍历抛出,队列二种始终更新这一条分树的值,最后相加

3. 题目代码

3.1 DFS

public int sumNumbers(TreeNode root) {
		return dfs(root, 0);
	}

	public static int dfs(TreeNode root, int prevSum) {
		if (root == null) {
			return 0;
		}
		// 最开始是0层~
		int sum = prevSum * 10 + root.val;
		if (root.left == null && root.right == null) {
			return sum;
		} else {
			return dfs(root.left, sum) + dfs(root.right, sum);
		}
	}

3.2 BFS

public int sumNumbers1(TreeNode root) {
		if(root == null) {
			return 0;
		}
		Queue<TreeNode> queue = new LinkedList<TreeNode>();
		Queue<Integer> queue1 = new LinkedList<Integer>();
		int sum = 0;
		queue.add(root);
		queue1.add(root.val);
		while (!queue.isEmpty()) {
			TreeNode tempNode = queue.poll();
			int num = queue1.poll();
			
			if(tempNode.left == null && tempNode.right == null) {
				System.out.println(num);
				sum += num;
			}else {
				if(tempNode.left != null) {
					queue.add(tempNode.left);
					queue1.add(num * 10 + tempNode.val);
				}
				if(tempNode.right != null) {
					queue.add(tempNode.right);
					queue1.add(num * 10 + tempNode.val);
				}
			}
		}
		return sum;
	}

4. 总结

  • 对于DFS而言,递归一定要看好入口和出口,准备开始刷刷递归的题目找找感觉。
  • 对于BFS而言,队列进进出出,数值都比较明显,也便于自己操作
  • 总而言之:题目刷多了,这种题就见怪不怪了。


标签:int,sum,tempNode,力扣,add,129,null,root,求根
From: https://blog.51cto.com/u_16127529/6340816

相关文章

  • 【力扣每日一题】1207. 独一无二的出现次数
    没想到C#的修改value值,可以直接dis[key]=value进行修改~~~1.题目描述2.题目分析每个数字在数组中出现的次数是独一无二的思路一:桶排,看了看数据范围,挺小,可以桶排思路二:字典(HashMap),最后Value都是等于1的返回true3.题目代码publicstaticboolUniqueOccurrences(int[]arr)......
  • 【力扣每日一题】144. 二叉树的前序遍历
    1.题目描述2.题目解析非常典型的一道二叉树题目思路一:递归求解思路二:迭代求解3.题目代码3.1递归**publicIList<int>PreorderTraversal(TreeNoderoot){List<int>list=newList<int>();Tree(root,list);returnlist;......
  • 力扣 647. 回文子串
    647.回文子串给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示......
  • 力扣2. 两数相加
    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0 开头。 示例1:输入:l1=[2,4,3],l2=[5,6......
  • 力扣---1161. 最大层内元素和
    给你一个二叉树的根节点 root。设根节点位于二叉树的第1层,而根节点的子节点位于第2层,依此类推。请返回层内元素之和最大的那几层(可能只有一层)的层号,并返回其中 最小的那个。 示例1:输入:root=[1,7,0,7,-8,null,null]输出:2解释:第1层各元素之和为1,第2层各元素......
  • 力扣---1080. 根到叶路径上的不足节点
    给你二叉树的根节点root和一个整数limit,请你同时删除树中所有不足节点,并返回最终二叉树的根节点。假如通过节点node的每种可能的“根-叶”路径上值的总和全都小于给定的limit,则该节点被称之为不足节点,需要被删除。叶子节点,就是没有子节点的节点。 示例1:输入:r......
  • 力扣---236. 二叉树的最近公共祖先
    给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个节点p、q,最近公共祖先表示为一个节点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。” 示例1:输入:root=[3,5,1,6,2,0,8,null,n......
  • 力扣---1372. 二叉树中的最长交错路径
    给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下:选择二叉树中任意 节点和一个方向(左或者右)。如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。改变前进方向:左变右或者右变左。重复第二步和第三步,直到你在树中无法继续移动。交错路径的长度......
  • leetcode-1295-easy
    FindNumberswithEvenNumberofDigitsGivenanarraynumsofintegers,returnhowmanyofthemcontainanevennumberofdigits.Example1:Input:nums=[12,345,2,6,7896]Output:2Explanation:12contains2digits(evennumberofdigits).345cont......
  • 力扣 72. 编辑距离
    72.编辑距离给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数  。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1="horse",word2="ros"输出:3解释:horse->rorse(将'h'......