leetcode_1022.從根到葉的二進制數之和(C++,用遞歸來遍歷)

題目

原題鏈接

給出一棵二叉樹,其上每個結點的值都是 01 。每一條從根到葉的路徑都代表一個從最高有效位開始的二進制數。例如,如果路徑爲 0 -> 1 -> 1 -> 0 -> 1,那麼它表示二進制數 01101,也就是 13

對樹上的每一片葉子,我們都要找出從根到該葉子的路徑所表示的數字。

10^9 + 7 爲模,返回這些數字之和。

思路

其實這題的思路很簡單,從根節點開始,遞歸遍歷整棵樹,每個 digit() 函數都有兩個參數——一個是當前節點的指針,另一個是從根節點到這個節點的路徑上所有二進制數之和。遍歷到了葉子節點就返回第二個參數,同時還要記得特判樹爲空的情況。

取模的話,不知道是不是題目有誤,~~不取模也是可以的hh,~~但是如果非要取模,記得每次更新路徑總和時都要 模% 一次。

以下是代碼:

/**
 * 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 sum = 0, mod = 1e9 + 7; //sum是最後的答案,mod是模數
    int sumRootToLeaf(TreeNode* root) {
        if(!root) return 0; //記得特判一下空樹
        digit(root, 0);
        return sum;
    }
    void digit(TreeNode* root, int s) {
        int num = (s * 2 + root -> val) % mod; //記得是要乘2
        if(!root -> left && !root -> right) {sum += num; return ;}
        if(root -> left) digit(root -> left, num);
        if(root -> right) digit(root -> right, num); 
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章