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

Posted Tisfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1022.从根到叶的二进制数之和相关的知识,希望对你有一定的参考价值。

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

给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。

  • 例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。
    对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。

返回这些数字之和。题目数据保证答案是一个 32 位 整数。

示例 1:

输入:root = [1,0,1,0,1,0,1]
输出:22
解释:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22

示例 2:

输入:root = [0]
输出:0

提示:

  • 树中的节点数在 [1, 1000]范围内
  • Node.val仅为 01

题目大意

假如从根到某个叶节点所经过的所有节点的值分别是“1”、“0”、“0”,那么最终答案就 加 上 ( 100 ) 2 加上(100)_2 (100)2

二进制的100等于十进制的4

思路

我们只需要层次遍历这棵树,遍历到某个节点时,如果存在子节点,子节点就加上这个节点的“值的<<1”的结果

方法一:层次遍历

  • 时间复杂度 O ( n ) O(n) O(n),其中 n n n是树中节点的数量
  • 空间复杂度 O ( n ) O(n) O(n)

AC代码

C++

class Solution 
public:
    int sumRootToLeaf(TreeNode* root)   // 不会为空
        int ans = 0;
        queue<TreeNode*> q;
        q.push(root);
        while (q.size()) 
            TreeNode* p = q.front();
            q.pop();
            if (p->left || p->right) 
                if (p->left) 
                    p->left->val += (p->val) << 1;
                    q.push(p->left);
                
                if (p->right) 
                    p->right->val += (p->val) << 1;
                    q.push(p->right);
                
            
            else 
                ans += p->val;
            
        
        return ans;
    
;

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/125043202

以上是关于LeetCode 1022.从根到叶的二进制数之和的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 1022 从根到叶的二进制数之和[dfs] HERODING的LeetCode之路

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

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

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

DFS | 从根到叶的二进制数之和附递归展开图

给定一棵二叉树,找到所有从根到叶的路径