LeetCode 1022
2020.8.15
我的通过代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int ans = 0;
int mod = 1000000000+7;
public int sumRootToLeaf(TreeNode root) {
traverse(root,0);
return ans%mod;
}
void traverse(TreeNode root, int sum) {
if(root==null) return;
if(root.left==null&&root.right==null) {
sum = sum*2+root.val;
ans+=sum;
} else {
sum = sum*2+root.val;
traverse(root.left,sum);
traverse(root.right,sum);
}
}
}
这道题并不算一道难题,但是我一开始的思路错了。
我想着得找个办法把每一条路径都记录下来,然后一个一个转换为二进制。
实在是太暴力了,我也没找到遍历之后记录所有路径的办法。。。
停下来想想二进制转十进制的过程,好像就是从最左边那一位开始,乘二进位,再加上下一位,并重复这个过程。那这样一来,我们在遍历二叉树的时候,也一层一层的来,遍历到一个节点,就做一次进位和加法,碰到叶子节点,就记录一条路径的和,这样一次遍历即可得到每条路径十进制的和。