int sumTree(TreeNode *root, int val){ if(root->left == NULL && root->right == NULL) return val * 10 + root->val; int ret = 0; if(root->left != NULL){ ret += sumTree(root->left, 10*val + root->val); } if(root->right != NULL){ ret += sumTree(root->right, 10*val + root->val); } return ret; }
int sumTree(SegTreeNode* root, int start, int end) { if (root->start == start && root->end == end) { return root->sum; } else { int mid = root->start + (root->end - root->start) / 2; if (end <= mid) { return sumTree(root->left, start, end); } else if (start > mid) { return sumTree(root->right, start, end); } else { return sumTree(root->left, start, mid) + sumTree(root->right, mid+1, end); } } }
void sumTree(node* t) { if(t==NULL) return ; sumTree(t->right); int temp = t->ele; t->ele = sum; sum += temp; sumTree(t->left); return; }
int sumTree(TreeNode *root,int baseSum){ if(root == NULL) { return baseSum; } baseSum = baseSum*10 + root->val; if(root->left == NULL && root->right == NULL) { return baseSum; } int curAns = 0; if(root->left != NULL) { curAns+=sumTree(root->left,baseSum); } if(root->right != NULL) { curAns+=sumTree(root->right,baseSum); } return curAns; }
int main() { int n; scanf("%d",&n); node* root = NULL; int elem,i; for(i=0; i<n; i++) { scanf("%d",&elem); if(root == NULL) root = createNode(elem); else insertInTree(root, elem); } printf("Printing Tree:\n"); printTree(root); printf("\n"); printf("After Reversal called:\n"); sumTree(root); printTree(root); return 0; }
int sumNumbers(TreeNode* root) { if(root == NULL) return 0; return sumTree(root,0); }
int sumRange(struct NumArray* numArray, int i, int j) { return sumTree(numArray->root, i, j); }
int sumNumbers(TreeNode *root) { return sumTree(root,0); }