Skip to content

Latest commit

 

History

History
89 lines (66 loc) · 2.66 KB

1022-sum-of-root-to-leaf-binary-numbers.md

File metadata and controls

89 lines (66 loc) · 2.66 KB

1022. Sum of Root To Leaf Binary Numbers - 从根到叶的二进制数之和

给出一棵二叉树,其上每个结点的值都是 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

 

提示:

  1. 树中的结点数介于 11000 之间。
  2. node.val 为 0 或 1 。

题目标签:Tree

题目链接:LeetCode / LeetCode中国

题解

Language Runtime Memory
cpp 12 ms 17.2 MB
/**
 * 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:
    vector<int> path;
    int res = 0;
    
    void dfs(TreeNode* node) {
        if (!node) return;
        path.push_back(node->val);
        if (node->left)
            dfs(node->left);
        if (node->right)
            dfs(node->right);
        // 到了叶子节点
        if (!node->left && !node->right) {
            int num = 0;
            for (int i = 0; i < (int)path.size(); i++) {
                if (path[i] == 1) {
                    num |= (1 << (int)path.size() - i - 1);
                }
            }
            // for (int p : path) cout << p << ", "; cout << endl;
            // cout << num << endl;
            res += num;
        }
        path.pop_back();
    }
    
    int sumRootToLeaf(TreeNode* root) {
        dfs(root);
        return res;
    }
};