給出一棵二叉樹,其上每個結點的值都是 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 和 1000 之間。
node.val 為 0 或 1 。
在完整的解法中,我加入了建樹的步驟,是用陣列層序建立的方式。關鍵在於找左右子節點與陣列元素序號之間的關係。陣列中我用-1表示插入空節點。
而題目要求的函式不難實現,用遞迴的方式。同時也需要知道二進位制數的計算方式。
treenode.h
#pragma once
#includeusing namespace std;
struct treenode
;typedef struct treenode treenode;
solution.h
#pragma once
#include"treenode.h"
#includeclass solution
;
solution.cpp
#include "solution.h"
int solution::sumroottoleaf(treenode* root)
int solution::sumroottoleaf(treenode* root, int total)
}void solution::insert(treenode* p, vectortemp, int t)
if ((2 * (t + 1) + 1) <= length)
} }}
treenode* solution::createfromarray(vectortemp)
Leetcode 1022從根到葉的二進位制之和
給出一棵二叉樹,其上每個結點的值都是 0 或 1 每一條從根到葉的路徑都代表乙個從最高有效位開始的二進位制數。例如,如果路徑為 0 1 1 0 1,那麼它表示二進位制數 01101,也就是 13 對樹上的每一片葉子,我們都要找出從根到該葉子的路徑所表示的數字。返回這些數字之和。題目資料保證答案是乙個...
1022 從根到葉的二進位制數之和
package com.heu.wsq.leetcode.tree 1022.從根到葉的二進位制數之和 author wsq date 2020 12 22 給出一棵二叉樹,其上每個結點的值都是 0 或 1 每一條從根到葉的路徑都代表乙個從最高有效位開始的二進位制數。例如,如果路徑為 0 1 1 0...
1022 從根到葉的二進位制數之和
給出一棵二叉樹,其上每個結點的值都是0或1。每一條從根到葉的路徑都代表乙個從最高有效位開始的二進位制數。例如,如果路徑為0 1 1 0 1,那麼它表示二進位制數01101,也就是13。對樹上的每一片葉子,我們都要找出從根到該葉子的路徑所表示的數字。返回這些數字之和。題目資料保證答案是乙個32 位整數...