LeetCode.1022-根到叶路径二进制数之和(Sum of Root To Leaf Binary Numbers)
这是小川的第381次更新,第410篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第243题(顺位题号是1022)。给定二叉树,每个节点值为0或1.每个根到叶路径表示以最高有效位开始的二进制数。例如,如果路径为0 -> 1 -> 1 -> 0 -> 1
,那么这可能表示二进制的01101
,即13。
对于树中的所有叶子节点,请考虑从根到该叶子节点的路径所代表的数字。返回这些数字的总和。
例如:
1
/ \
0 1
/ \ / \
0 1 0 1
输入:[1,0,1,0,1,0,1]
输出:22
说明:(100)+(101)+(110)+(111)= 4 + 5 + 6 + 7 = 22
注意:
树中的节点数介于1和1000之间。
node.val
是0或1。答案不会超过2^31 - 1。
02 第一种解法
递归的方式解题。
结合题目给的示例来看,可以将该二叉树分为两部分,left
和right
,left
那一支有两条路径100和101,直接做加法就是4+5=9;right
那一支也有两条路径110和111,直接做加法就是6+7=13,我们可以将求和拆分成左子树、右子树之和来做。
如果当前节点为空,返回0。如果当前节点如果为叶子节点(没有左子节点和右子节点的节点),就返回此路径所表示的整数。计算路径上的二进制数,可以通用此代码:int val = val*2 + currentNodeValue;
,和前天的那道题目在处理累加二进制字符串上类似。
public int sumRootToLeaf(TreeNode root) {
return getSum(root, 0);
}
public int getSum(TreeNode root, int sum) {
if (root == null) {
return 0;
}
// 换成 sum = (sum<<1) + root.val; 效果一样
sum = sum*2 + root.val;
// 当前节点为叶子节点时
if (root.left == null && root.right == null) {
return sum;
}
return getSum(root.left, sum) + getSum(root.right, sum);
}
03 第二种解法
迭代的方式解题。借助两个栈来实现,思路和上面类似。
public int sumRootToLeaf2(TreeNode root) {
if (root == null) {
return 0;
}
int sum = 0;
// 存节点
Stack<TreeNode> stack = new Stack<TreeNode>();
// 存路径所代表整数
Stack<Integer> prevSum = new Stack<Integer>();
stack.push(root);
prevSum.push(root.val);
while (!stack.isEmpty()) {
TreeNode temp = stack.pop();
Integer tempSum = prevSum.pop();
// 左子树
if (temp.left != null) {
stack.push(temp.left);
prevSum.push(tempSum*2 + temp.left.val);
}
// 右子树
if (temp.right != null) {
stack.push(temp.right);
prevSum.push(tempSum*2 + temp.right.val);
}
// 叶子节点,累加完整路径所表示的整数
if (temp.left == null && temp.right == null) {
sum += tempSum;
}
}
return sum;
}
04 小结
算法专题目前已连续日更超过七个月,算法题文章249+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode.1022-根到叶路径二进制数之和(Sum of Root To Leaf Binary Numbers)的更多相关文章
- LeetCode 1022. 从根到叶的二进制数之和(Sum of Root To Leaf Binary Numbers)
1022. 从根到叶的二进制数之和 1022. Sum of Root To Leaf Binary Numbers 题目描述 Given a binary tree, each node has v ...
- [Swift]LeetCode1022. 从根到叶的二进制数之和 | Sum of Root To Leaf Binary Numbers
Given a binary tree, each node has value 0 or 1. Each root-to-leaf path represents a binary number ...
- 【Leetcode_easy】1022. Sum of Root To Leaf Binary Numbers
problem 1022. Sum of Root To Leaf Binary Numbers 参考 1. Leetcode_easy_1022. Sum of Root To Leaf Binar ...
- 1022. Sum of Root To Leaf Binary Numbers从根到叶的二进制数之和
网址:https://leetcode.com/problems/sum-of-root-to-leaf-binary-numbers/ 递归调用求和,同时注意%1000000007的位置 /** * ...
- 【LeetCode】1022. Sum of Root To Leaf Binary Numbers 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetco ...
- Leetcode 1022. Sum of Root To Leaf Binary Numbers
dfs class Solution: def sumRootToLeaf(self, root: TreeNode) -> int: stack=[(root,0)] ans=[] bi_st ...
- 【leetcode】1022. Sum of Root To Leaf Binary Numbers
题目如下: Given a binary tree, each node has value 0 or 1. Each root-to-leaf path represents a binary n ...
- LeetCode1022. 从根到叶的二进制数之和
题目 class Solution { public: int ans = 0; int sumRootToLeaf(TreeNode* root) { dfs(root,0); return ans ...
- [LeetCode] Sum Root to Leaf Numbers 求根到叶节点数字之和
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...
随机推荐
- ZOJ3471Most Powerful(状态压缩)
问题 Recently, researchers on Mars have discovered N powerful atoms. All of them are different. These ...
- MySQL user表初始化
默认安装的MySQL数据库,无法远程连接. 登录MySQL之后,运行 SELECT user,host from mysql.user; 如果只有一条记录,说明是这个原因. 将下面的脚本保存成user ...
- Django 文件配置、pycharm及django连接数据库、表的增删改查 总结
静态文件配置 1.你在浏览器中输入网址能够有响应的资源返回给你 是因为后端已经提前给你开设该资源的接口,也就意味着你所能 访问到的资源 都是人家事先定义好的 2.django如何给用户开设资源接口呢? ...
- Java多线程和并发(四),线程返回值获取方式和Callable接口
目录 1.主线程等待法 2.使用Thread类的join()阻塞当前线程,等待子线程执行完毕 3.通过Callable接口实现:通过FutureTask Or线程池获取 四.线程返回值获取方式和Cal ...
- D. Tokitsukaze, CSL and Stone Game ( 取石子游戏?no,更像棋盘游戏 )
去吧,皮皮虾 题意: 有 n 堆石子,每堆有 a[ i ] 个,然后每次 操作 可以选择任意一堆 石子,取走一个. 若你取完了之后,存在两堆石子,他们的个数一样多,你就输了( 包括两堆都是0个), ...
- Springboot 注册拦截器
拦截器 创建myInterceptor类 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSer ...
- 【HDOJ5447】Good Numbers(数论)
题意: 思路:From https://blog.csdn.net/qq_36553623/article/details/76683438 大概就是把1e6里面的质因子能除的都除光之后借助两者gcd ...
- malloc,calloc,realloc
与堆操作相关的两个函数 malloc #include<stdio.h> #include<stdlib.h> #include<string.h> int mai ...
- Linux命令-磁盘管理(二)
Linux命令-磁盘管理(二) Linux mmount命令 Linux mmount命令用于挂入MS-DOS文件系统. mmount为mtools工具指令,可根据[mount参数]中的设置,将磁盘内 ...
- VMware Guest customization fails on Linux
1.1 症状现象 登录Guest OS,在/var/log/vmware-imc/toolsDeployPkg.log文件中,您会看到以下条目: Customization command fail ...