從根到葉的二進制數之力扣
題目
從根到葉的二進制數之和(力扣:1022 )
給出一棵二叉樹,其上每個結點的值都是 0 或 1 。每一條從根到葉的路徑都代表一個從最高有效位開始的二進制數。例如,如果路徑爲 0 -> 1 -> 1 -> 0 -> 1,那麼它表示二進制數 01101,也就是 13 。
對樹上的每一片葉子,我們都要找出從根到該葉子的路徑所表示的數字。
以 10^9 + 7 爲模,返回這些數字之和。
分析
使用遞歸求解,結束條件爲:
- 當root等於null時,返回0。
- sum等於當前值乘以2(表示左移一位)+ 當前節點值。當前節點爲葉子節點是,返回sum。
- 最後遍歷左子樹和右子樹,結果爲左右子樹的結果相加,並返回。
代碼實現
/**
* 1022. 從根到葉的二進制數之和
* @param root
* @return
*/
public int sumRootToLeaf(TreeNode root) {
return sumRootToLeafDfs(root, 0);
}
private int sumRootToLeafDfs(TreeNode root, int sum){
if (root == null){
return 0;
}
sum = sum * 2 + root.val;
if (root.left == null && root.right == null){
return sum;
}
return sumRootToLeafDfs(root.left, sum) + sumRootToLeafDfs(root.right, sum);
}