(刷题笔记)Leetcode 1022.从根到叶的二进制之和

LeetCode 1022. 从根到叶的二进制之和 超详细技术解析(Python) 本文详细解析了LeetCode 1022题"从根到叶的二进制之和"的两种解法:DFS递归和BFS迭代。题目要求计算二叉树所有根到叶路径表示的二进制数之和,其中节点值为0或1。DFS方案通过递归遍历实时计算路径值,代码简洁;BFS方案使用队列避免递归,更稳定通用。两种方法都采用"当前值×2+节点值"的二进制转十进制技巧,时间复杂度O(n)(n为节点数),空间复杂度O(h)(h为树高)。文章包含完整代码、逐行解析和示例验证,适合算法初学者学习二叉树遍历与进制转换的结合应用 阅读详情

题目

给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。

对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。

以 10^9 + 7 为模,返回这些数字之和。

示例:
在这里插入图片描述
输入:[1,0,1,0,1,0,1]
输出:22
解释:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-root-to-leaf-binary-numbers

解题思路

没有弄懂题目里面的模是什么意思,不过按示例的意思,结果返回这些二进制数转换成十进制之后的和。
本题与题目257.二叉树的所有路径类似,主要考察树的中序遍历。257额外考察一点string的知识,本题额外考察一点二进制的知识。

正好257介绍的是非递归思路,所以这里介绍递归思路。

  • 1.递归结束条件:root==NULL
  • 2.递归过程中要做的事情:
    • a.记录每个结点的值,并将值按遍历顺序排列成二进制数;
    • b.将满足要求的值加到结果中;
  • 3.递归顺序:先左后右

知识点总结

二进制操作符:左移<< 相当于乘2 右移>> 相当于除2
二进制转十进制的公式:binary=(binary<<1)|root->val;
参考:C++二进制操作符

代码(C++)

递归

/**
 * 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:

    void dfs(TreeNode* root,int binary,int &res){
        if(root==NULL) return ;
        binary=(binary<<1)|root->val;
        if(root->left==NULL&&root->right==NULL){
            res+=binary;
        }

        dfs(root->left,binary,res);
        dfs(root->right,binary,res);
    }



    int sumRootToLeaf(TreeNode* root) {
        int res=0;
        int binary=0;
        dfs(root,binary,res);
        return res;

    }
};

非递归

/**
 * 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) {

        stack<pair<TreeNode*,int>> st;
        int binary=0;
        int res=0;

        while(!st.empty()||root){

            while(root){
                binary=(binary<<1)|root->val;
                st.push(pair(root,binary));
                root=root->left;
            }

            binary=st.top().second;
            root=st.top().first;
            st.pop();
            if(root->left==NULL&&root->right==NULL){
                res+=binary;
            }
            root=root->right;
        }
        return res;
       

    }
};
构造哈夫曼树之后,求每一个字符的编码需要走一条从叶子结点到根结点的路径 实现哈夫曼算法的前提是要考虑用什么样的存储结构来存储一棵哈夫曼树。在哈夫曼树中,没有度为1的结点,结点总数是n0+n2(其中n0表示二叉树中度为0的结点数,n2表示度为2的结点数),而由二叉树的性质知道n0=n2+1,所以一棵哈夫曼树中结点总数是2n0-1。 由此可以得出:任何n个字符的哈夫曼树的结点总数是2n-1。既然结点总数可以确定,就可以采用顺序存储结构来实现,即可以把结点信息存放在大小为2n-1的一维数组(如数组ht)中。 立即下载

相关推荐

人工智能(AI)简史:推动新时代的科技力量

人工智能(AI,Artificial Intelligence)是计算机科学的一个分支,旨在研究和开发可以模拟、扩展或增强人类智能的系统。它涉及多种技术和方法,包括机器学习、深度学习、自然语言处理(NLP)、计算机视觉、专家系统等。

qq_17153885的博客 1万+

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

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

qq_45569601的博客 315

MT6816角度传感器SPI通信避坑指南:从数据手册到稳定读取的3个关键步骤

本文详细解析了MT6816角度传感器SPI通信中的常见问题与解决方案,包括寄存器地址计算、SPI时序配置和数据校验等关键步骤。通过实测波形和代码示例,帮助工程师避开数据手册中的隐藏陷阱,实现稳定可靠的角度数据读取,特别适用于高精度电机控制场景。

weixin_42520573的博客 517

leetcode 1022. 从根到叶的二进制数之和(C++、python)

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

qq_27060423的博客 376

脑机接口技术介绍、应用与挑战

脑机接口的概念最先于1973年提出,伴随着计算机性能的飞速提高,在美国“人类脑计划”的资金支持下,脑机接口的研究进入了高速发展期。去年年末,我国科技部会议透露:中国将拿出540亿元,推进中国脑计划的发展。同时,这一举措也推动了我国脑机接口的研究发展。 脑机接口属于多学科交叉科技,涉及神经科学、计算机科学、认知科学、控制与信息科学技术、医学等多个学科。技术实现方式是通过信号采集设备从大脑皮层采集脑电信号,经过放大、滤波、A/D转换等处理,转换为可以被计算机识别的信号,然后对信号进行预处理,提取特征信号,再利

weixin_44603934的博客 9132

Hierarchical Flow Partition(Top-down&&Bottom-up)

hierarchy flow是将设计切分成多个block,分别处理单个block,然后完成后,将它们进行拼接以完成最终的chip。一般划分为三个阶段:chip planning;physical budget就是pin assignmenthierarchy flow实现的方法有两种,一种是top-down,另一种是bottom-up,无论是哪种,都是都要通过flatten的方法分别全局范围进行优化实现。

qq_39493558的博客 3072

leetcode_1022.从根到叶的二进制数之和(C++,用递归来遍历)

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

qq_45698847的博客 225

攀藤PMS系列传感器STM32驱动开发与数据解析实战

本文详细介绍了攀藤PMS系列传感器与STM32微控制器的驱动开发与数据解析实战,涵盖硬件连接、数据协议解析、驱动源码编写及数据处理优化。重点解析了传感器数据帧结构,提供了完整的STM32驱动实现代码,并分享了实际应用中的问题排查与性能优化经验,帮助开发者快速实现高精度颗粒物浓度检测。

milk8的博客 348

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

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

HarvestWu的博客 295

详解TCP/IP五层模型

TCP/IP模型是一个网络通信体系结构,由五层组成,每一层都有其特定的功能。应用层传输层网络层数据链路层物理层每一层都有不同的责任,通过这种层次结构,网络通信可以更有效地进行。

2201_75437633的博客 1万+

PyTorch GPU版本安装避坑指南:解决RuntimeError: No CUDA GPUs are available报错

本文详细解析了PyTorch GPU版本安装过程中常见的`RuntimeError: No CUDA GPUs are available`报错问题,从硬件驱动检查、CUDA Toolkit与cuDNN安装到PyTorch GPU版本的正确配置,提供了全面的避坑指南和实战验证方法,帮助开发者高效搭建深度学习开发环境。

r2s3t4的博客 297

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

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

叫我龙翔的博客 1707

第229篇 轨迹时间参数化——TOPP-RA和速度约束处理

本文介绍了时间最优路径参数化(TOPP)问题及其解法。TOPP研究如何在给定空间路径上分配时间,使机器人运动时间最短且不超速,需满足速度、加速度和力矩约束。经典解法采用相平面法,通过前向和后向扫描确定最优速度曲线。TOPP-RA改进了数值稳定性,支持多约束处理。文章对比了TOPP与轨迹优化的区别,列举了开源工具,并解答了面试常见问题,指出TOPP广泛应用于机械臂、AGV等领域。TOPP不改变路径形状,仅优化速度分配,其最优解具有bang-bang特性。

郑伟强dev的专栏 322

从根到叶的二进制数之和

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

卜大爷的博客 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

LeetCode1022 从根到叶二进制数之和

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

trolling的博客 232

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

weixin_43891775的博客 196

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

leetcode 算法题1022 (简单270) 从根到叶的二进制数之和

leetcode 算法题1022 (简单270) 从根到叶的二进制数之和 题目介绍 给出一棵二叉树,其上每个结点的值都是 0 或 1 。 每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。 例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1, 那么它表示二进制数 01101,也就是 ...

FYuu95100的博客 277

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

1022. 从根到叶的二进制数之和 题目地址:https://leetcode-cn.com/problems/sum-of-root-to-leaf-binary-numbers/ 本题与 129 题思路方法相同:https://blog.csdn.net/weixin_40468534/article/details/109261857 /* 给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 ->

weixin_40468534的博客 755

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

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

Sophia_fez的博客 596

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

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

<font color="Pink">Tisfy的博客</font> 457

LeetCode1022.Sum of Root To Leaf Binary Numbers(从根到叶的二进制数之和)

1022.Sum of Root To Leaf Binary Numbers(从根到叶的二进制数之和)DescriptionDifficulty: easyExample 1:Note:分析参考代码 Description Given a binary tree, each node has value 0 or 1. Each root-to-leaf path represents a b...

redtongue的博客 408

leetcode -1022 -从根到叶的二进制数之和 -java版

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

lingle1的博客 474

LeetCode 1022. 从根到叶的二进制数之和(递归)

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

Michael是个半路程序员 1063

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

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

Lucy_wzw的博客 743

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

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

hushaoqiqimingxing的博客 337
上一篇: (刷题笔记)Leetcode 257.二叉树的所有路径
下一篇: (刷题笔记)Leetcode 872.叶子相似的树
Lucky&Happy
博客等级 码龄10年 1粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值