Given a binary tree, each node has value 0
or 1
. Each root-to-leaf path represents a binary number starting with the most significant bit. For example, if the path is 0 -> 1 -> 1 -> 0 -> 1
, then this could represent 01101
in binary, which is 13
.
For all leaves in the tree, consider the numbers represented by the path from the root to that leaf.
Return the sum of these numbers.
Example 1:
Input: [1,0,1,0,1,0,1] Output: 22 Explanation: (100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22
Note:
- The number of nodes in the tree is between
1
and1000
. - node.val is
0
or1
. - The answer will not exceed
2^31 - 1
.
解法1:
DFS递归
class Solution {
public:
int sumRootToLeaf(TreeNode* root) {
if(root==NULL) return 0;
return sumRootToLeafDFS(root,0);
}
int sumRootToLeafDFS(TreeNode* root,int sum){
if(root==NULL) return 0;
sum=sum*2+root->val;
if (!root->left && !root->right) return sum;
return sumRootToLeafDFS(root->left,sum)+sumRootToLeafDFS(root->right,sum);
}
};
解法2:
利用栈迭代求解
class Solution {
public:
int sumRootToLeaf(TreeNode* root) {
if(root==NULL) return 0;
stack<TreeNode*> st;
st.push(root);
int ans=0;
while(!st.empty()){
TreeNode *nd=st.top();
st.pop();
if (!nd->left && !nd->right)
ans+=nd->val;
if(nd->left!=NULL){
nd->left->val+=nd->val*2;
st.push(nd->left);
}
if(nd->right!=NULL){
nd->right->val+=nd->val*2;
st.push(nd->right);
}
}
return ans;
}
};