【简单】1022. 从根到叶的二进制数之和(两种迭代+递归)

笔记-程序员的数学课-二进制,余数,迭代法,归纳,递归,排列组合,动态规划,树,搜索,复杂度 二进制 二进制左移一位(不溢出):数字翻倍。 二进制右移一位: 算术右移:最高位不变,次高位补0.数字除以2并求整数商。 逻辑右移:左边补0即可。 余数 同余定理:两个整数 a 和 b,如果它们除以正整数 m 得到的余数相等,我们就可以说 a 和 b 对于模 m 同余。 应用:分类,加密算法、MapReduce 中的数据分发、记录的高速查询和定位等等。 哈希算法:将任意长度的输入,通过哈希算法,压缩为某一固定长度的输出。(通过余数,你就能将任何数值,转换为有限范围内的一个数值,然后根据这个新的数值,来 阅读详情

【题目】
给出一棵二叉树,其上每个结点的值都是 0 或 1 ,每一条从根到叶的路径都代表一个从最高有效位开始的二进制数,例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13,对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字,以 10^9 + 7 为模,返回这些数字之和。
在这里插入图片描述
来源:leetcode
链接:https://leetcode-cn.com/problems/sum-of-root-to-leaf-binary-numbers/
【示例】
输入:[1,0,1,0,1,0,1]
输出:22
解释:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22
【提示】
树中的结点数介于 1 和 1000 之间
node.val 为 0 或 1
【代码】
【迭代法一】

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
private:
    int sum=0;
    stack<TreeNode*> s,s2;
public:
    void deal(){
        while(!s.empty()){
            s2.push(s.top());
            s.pop();
        }
        int calc=0;
        while(!s2.empty()){
            s.push(s2.top());
            calc=calc*2+s2.top()->val;
            s2.pop();
        }
        sum+=calc;
    }
    int sumRootToLeaf(TreeNode* root) {
        TreeNode*node=root,*last=NULL;
        while(!s.empty()||node){
            while(node){
                s.push(node);
                node=node->left;
            }
            if(!s.empty()){
                node=s.top();
                if(node->right&&node->right!=last)
                    node=node->right;
                else{
                    if(node->left==NULL&&node->right==NULL)
                        deal();
                    s.pop();
                    last=node;
                    node=NULL;
                }
            }
        }
        return sum;
    }
};

【迭代法二】

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int sumRootToLeaf(TreeNode* root) {
        if(root==NULL)
            return 0;
        pair<TreeNode*,int> node=pair<TreeNode*,int>(root,root->val);
        stack<pair<TreeNode*,int>> s;
        s.push(node);
        int sum=0;
        while(!s.empty()){
            node=s.top();
            s.pop();
            if(node.first->left==NULL&&node.first->right==NULL)
                sum+=node.second;
            if(node.first->left)
                s.push(pair<TreeNode*,int>(node.first->left,node.second*2+
                node.first->left->val));
            if(node.first->right)
                s.push(pair<TreeNode*,int>(node.first->right,node.second*2+
                node.first->right->val));
        }
        return  sum;
    }
};

【递归法】

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
private: 
    int sum=0;
public:
    void preOrder(TreeNode* root,int num){
        if(root->left==NULL&root->right==NULL){
            sum+=num;
            return;
        }
        if(root->left)
            preOrder(root->left,num*2+root->left->val);
        if(root->right)
            preOrder(root->right,num*2+root->right->val);        
    }
    int sumRootToLeaf(TreeNode* root) {
        if(root==NULL)
            return 0;
        preOrder(root,root->val);
        return sum;
    }
};
LeetCode 1022. 从根到叶的二进制之和 超详细技术解析(Python) 本文详细解析了LeetCode 1022题"从根到叶的二进制之和"的两种解法:DFS递归和BFS迭代。题目要求计算二叉树所有根到叶路径表示的二进制数之和,其中节点值为0或1。DFS方案通过递归遍历实时计算路径值,代码简洁;BFS方案使用队列避免递归,更稳定通用。两种方法都采用"当前值×2+节点值"的二进制转十进制技巧,时间复杂度O(n)(n为节点数),空间复杂度O(h)(h为树高)。文章包含完整代码、逐行解析和示例验证,适合算法初学者学习二叉树遍历与进制转换的结合应用 阅读详情

相关推荐

【STM32/GD32】Keil uVision生成bin文件:从编译选项到Bootloader升级实战

本文详细讲解了如何在Keil uVision中配置STM32/GD32工程,使其在编译后自动生成Bootloader升级所需的bin文件。通过解析fromelf工具的使用、构建后命令的配置以及内存布局规划,深入阐述了bin文件在固件升级中的核心作用,并提供了串口Bootloader的实战框架与常见问题解决方案。

weixin_29190169的博客 395

LeetCode 1022. 从根到叶的二进制数之和

1022. 从根到叶的二进制数之和 给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。 对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。 返回这些数字之和。题目数据保证答案是一个 32 位 整数。 示例 1: 输入:root = [1,0,1,0,1,0,1] 输出:22 解释:(100) + (1

Daylight629博客 438

车载以太网抓包实战:100BASE-T1/1000BASE-T1高效监控方案解析

本文深入解析了车载以太网100BASE-T1/1000BASE-T1的高效抓包监控方案。针对智能汽车开发中的故障排查与性能测试需求,详细对比了交换机镜像、TAP分流和捕获模块三大主流方案的原理、核心优势与适用场景,并提供了基于实战经验的选型指南与操作避坑要点,帮助工程师精准定位网络问题。

desk3的博客 429

1022. 从根到叶的二进制数之和

package com.heu.wsq.leetcode.tree; /** * 1022. 从根到叶的二进制数之和 * @author wsq * @date 2020/12/22 * 给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。 * 对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字

Codeoh的博客 281

OCR开发实战:如何用PaddleOCR C++版实现本地文字识别(附模型文件处理技巧)

本文详细介绍了如何使用PaddleOCR C++版实现本地文字识别,包括环境搭建、工程编译、运行时优化等全流程。重点讲解了在VS2019/VS2022环境下配置PaddleOCR的CPU推理性能优化技巧,以及模型文件处理的实际应用方法,帮助开发者高效完成OCR本地化部署。

devops8pract的博客 335

vue 获取el-table多选的选中行

<el-table :data='tableData' ref="multipleTable" v-loading='loading' border max-height='700' style='width: 100%' size="mini"> <el-table-column type="selection" width="55"></el-table-column> <el-table-column label

且听风吟的博客 6649

Leetcode从根到叶的二进制数之和

题目描述 给出一棵二叉树,其上每个结点的值都是0或1。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数01101,也就是13。对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。返回这些数字之和。题目数据保证答案是一个 32 位 整数。 示例 1: 输入:root = [1,0,1,0,1,0,1] 输出:22 解释:(100) + (101) + (110)...

码农笔记 196

别再只设接触压力了!用ANSYS Workbench模拟O型圈密封泄漏的完整流程

本文详细介绍了在ANSYS Workbench中模拟O型圈密封泄漏的完整流程,重点解析了流体渗透压力载荷的设置与应用。通过双物理场耦合模型和精确的参数配置,帮助工程师准确评估密封性能,避免传统方法仅考虑接触压力的局限性。文章还提供了常见问题的解决方案和工程实践建议,提升密封设计的可靠性。

weixin_30372371的博客 403

Leetcode 1022:从根到叶的二进制数之和(超详细的解法!!!)

给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。 对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。 以 10^9 + 7 为模,返回这些数字之和。 示例: 输入:[1,0,1...

coordinate的博客 1289

ABAP Cloud 里的高性能日志:CL_BALI_LOG、XCO_CP_BAL 与 AML 的性能对比与选型指南

ABAP日志框架性能对比与选型建议 本文对比了ABAP Cloud中三种主流日志框架的性能表现与适用场景: 标准BALI:适合明确需要保存日志的场景,保存路径短,性能较好 XCO_CP_BAL:API更现代但性能较低,适合需要即时可见性的场景 AML:开源框架,擅长消息缓冲,适合批量处理时暂存消息 测试结果表明: 纯记录不落库时AML最快 需要保存时BALI性能最优 second connection不提升性能但能确保日志留存 选型建议: 高频批处理优先AML+BALI组合 故障诊断考虑XCO的即时可见性

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 215

【30天从零玩转AI应用开发】第16篇:智能体Agent入门——ReAct框架原理+首个会思考、会动手的AI实战

摘要: 本文介绍了AI智能体(Agent)的核心概念及其与普通大模型(LLM)的区别。通过ReAct(Reason+Act)框架,智能体实现了自主思考、调用工具和分步执行的能力。文章详细讲解了LangChain Agent的四大组件,并推荐新手使用ZERO_SHOT_REACT_DESCRIPTION类型。最后提供了一个完整的智能体实战代码示例,该智能体具备数学计算和天气查询功能,能够自主选择工具完成任务,展示了AI从”被动回答“到”主动行动“的关键进化。

在上海谋生的软件喵记录喵生 626

【树-简单】1022. 从根到叶的二进制数之和(两种方法:递归、迭代)

【题目】 给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。 返回这些数字之和。题目数据保证答案是一个 32 位 整数。 示例 1: 输入:root = [1,0,1,0,1,0,1] 输出:22 解释:(100) + (101) + (110) + (1

... 138

Python 爬虫实战:爬虫与 ECharts 结合 —— 前端可视化展示

本文介绍了爬虫技术与ECharts可视化结合的完整实现流程。首先使用Python爬取京东商品数据(价格、评价数等),通过BeautifulSoup解析和pandas处理转换为JSON格式。然后构建前端页面,利用ECharts实现价格分布柱状图、价格-评价数散点图和店铺占比饼图三种可视化效果。文章详细解析了爬虫数据提取、格式转换和前端图表配置等关键技术点,并提供了完整的代码示例。最后提出了基于API接口、数据库存储等扩展方向,为数据采集到可视化展示提供了完整的解决方案。

2503_91057718的博客 633

【宫水三叶的刷题日记】1022. 从根到叶的二进制数之和

题目描述 这是 LeetCode 上的 1022. 从根到叶的二进制数之和 ,难度为 简单。 Tag : 「DFS」、「BFS」、「二叉树」、「树的遍历」 给出一棵二叉树,其上每个结点的值都是  或  。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。 例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是  。 对树上的每一片叶子,我们都要找出从根

宫水三叶的刷题日记 357

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【刷题】 Leetcode 1022.从根到叶的二进制数之和

本文介绍了1022.从根到叶的二进制数之和的两种解法,深度优先搜索和栈模拟遍历。

叫我龙翔的博客 1709

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

python-leetcode-1022. 从根到叶的二进制数之和

可以使用深度优先搜索(DFS)或广度优先搜索(BFS)遍历整棵二叉树,在遍历过程中维护当前路径表示的二进制数,并在到达叶子节点时将其累加到结果中。

Lucy_wzw的博客 743

[LeetCode]1022. 从根到叶的二进制数之和

题目 1022. 从根到叶的二进制数之和 1022. 从根到叶的二进制数之和 给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。 例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。 对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。 返回这些数字之和。题目数据保证答案是一个 32 位 整数。 示例 1: 输入:root = [1,0,1

wat1r的博客 199

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。 对于树中的所有叶子节点,请考虑从根到该...

weixin_30493321的博客 80

【Leetcode_总结】1022. 从根到叶的二进制数之和 - python

Q: 给出一棵二叉树,其上每个结点的值都是0或1。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数01101,也就是13。 对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。 以10^9 + 7为模,返回这些数字之和。 示例: 输入...

maka_uir的博客 309

题目:1022.从根到叶的二进制数之和

leetcode 题目:1022.从根到叶的二进制数之和

2301_76145947的博客 87

2.2基本算法之递归和自调用函数_LeetCode1022: 从根到叶的二进制数之和

题目介绍描述:给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。以 10^9 + 7 为模,返回这些数字之和。输入:[1,0,1,0,1,0,...

weixin_39983384的博客 152

【leetcode 1022. 从根到叶的二进制数之和】Python 解题思路

给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。 对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。 以 10^9 + 7 为模,返回这些数字之和。 题目链接: 开心,又实践了一下nonlocal的用法,对于二进制数的操作还是得锻炼熟悉,对于二叉树的递归操作还得加深理解,不然用的时候什么也想不起来.

sinat_32682001的博客 299

1022. 从根到叶的二进制数之和 / 剑指 Offer II 066. 单词之和

1022. 从根到叶的二进制数之和 / 剑指 Offer II 066. 单词之和

在彼淇梁的博客 202

leetcode-5.16[1022. 从根到叶的二进制数之和、633. 平方数之和、371. 两整数之和](python实现)

题目1 题解1 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # def sumRootToLeaf(self, root: TreeNode) -> int: # "

leadingme的博客 250

Java&C++题解与拓展——leetcode1022.从根到叶的二进制数之和【么的新知识】

leetcode1022.从根到叶的二进制数之和解题思路,用Java、C++和Rust三种语言分别编写,并对所使用类和方法进行学习记录。

菜鸡成长之路 356
上一篇: 【简单】LCP 02. 分式化简
下一篇: 【简单】1337. 方阵中战斗力最弱的 K 行
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值