/** Recursive solution. */ int Solution::sumNumbers(TreeNode *root) { if(!root) return 0; TreeNode *left = root->left; TreeNode *right = root->right; if(!left && !right) return root->val; int nLeftSum = 0; if(left) { int nLeftValue = left->val; left->val += root->val * 10; nLeftSum = sumNumbers(left); left->val = nLeftValue; } int nRightSum = 0; if(right) { int nRightValue = right->val; right->val += root->val * 10; nRightSum = sumNumbers(right); right->val = nRightValue; } return nLeftSum + nRightSum; }
void sumNumbers(TreeNode *root, int prev) { prev = prev *10 + root->val; if(isLeaf(root)) allSum += prev; else { if(root->left != 0) sumNumbers(root->left, prev); if(root->right != 0) sumNumbers(root->right, prev); } }
int sumNumbers(TreeNode* root, int val) { if(root == NULL) { return 0; } if(!root->left && !root->right) { return val*10+root->val; } return sumNumbers(root->left, val*10+root->val) + sumNumbers(root->right, val*10+root->val); }
void sumNumbers(TreeNode* root,vector<int>& container,string s){ if(root){ s+=to_string(root->val); if(!root->left && !root->right){ container.push_back(stoi(s)); } sumNumbers(root->left,container,s); sumNumbers(root->right,container,s); } }
int sumNumbers(TreeNode* root, int x){ if(root->left == NULL && root->right == NULL) return 10 * x + root->val; int val = 0; if(root->left) val += sumNumbers(root->left, 10 * x + root->val); if(root->right) val += sumNumbers(root->right, 10 * x + root->val); return val; }
void sumNumbers(TreeNode *node, int &totalSum, int curSum){ curSum = curSum *10 + node->val; if (node->left==NULL && node->right==NULL){ totalSum += curSum; return; } if (node->left != NULL) sumNumbers(node->left, totalSum, curSum); if (node->right != NULL) sumNumbers(node->right, totalSum, curSum); }
int sumNumbers(TreeNode *root, int parent) { if( root==NULL ) return 0; parent = parent*10 + root->val; if( root->left==NULL && root->right==NULL ) return parent; return sumNumbers( root->left, parent ) + sumNumbers( root->right, parent ); }
int sumNumbers(TreeNode* root, int sum) { if (!root) { return 0; } sum = sum* 10 + root->val; if (!root->left && !root->right) { return sum; } return sumNumbers(root->left, sum) + sumNumbers(root->right, sum); }
int sumNumbers(TreeNode* root, int prefix) { prefix = prefix*10 + root->val; if (!root->left && !root->right) return prefix; int sum = 0; if (root->left) sum += sumNumbers(root->left, prefix); if (root->right) sum += sumNumbers(root->right, prefix); return sum; }
void sumNumbers(TreeNode* root,vector<vector<int> >& vec,vector<int> vec1) { if(root==NULL)return; vec1.push_back(root->val); bool isLeaf=(root->left==NULL&&root->right==NULL); if(isLeaf) { vec.push_back(vec1); } if(root->left!=NULL)sumNumbers(root->left,vec,vec1); if(root->right!=NULL)sumNumbers(root->right,vec,vec1); vec1.pop_back(); }
int sumNumbers(TreeNode* root, int sum) { sum = sum * 10 + root->val; if (nullptr == root->left && nullptr == root->right) return sum; if (nullptr == root->left) return sumNumbers(root->right, sum); else if (nullptr == root->right) return sumNumbers(root->left, sum); else return sumNumbers(root->left, sum) + sumNumbers(root->right, sum); }
void sumNumbers(TreeNode *root, int sum) { if (!root) { return; } if (!root->left && !root->right) { ans += sum * 10 + root->val; return; } sumNumbers(root->left, sum * 10 + root->val); sumNumbers(root->right, sum * 10 + root->val); }
int sumNumbers(TreeNode *tree, int number){ int sum = number*10, left=0, right=0; sum += tree->val; //得到当前节点的值 if(tree->left) { //如果左边不为空,递归求解左子树 left = sumNumbers(tree->left, sum); } if(tree->right) {//如果右边不为空,递归求解右子树 right = sumNumbers(tree->right, sum); } if(!left && !right) { //如果左右都为空,返回当前节点的值 return sum; } else { return left+right; //否则,返回两边的和 } }
int main(){ string trees[] = {"1","2","3"}; // string trees[] = {"5","4","8","11","#","13","4","7","2","#","#","#","#","5","1"}; TreeNode * root = init_complete_binary_tree_from_nodes(trees,0, sizeof(trees)/ sizeof(string)); cout<<sumNumbers(root)<<endl; return 0; }
int sumNumbers(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function if (!root) return 0; return sumNumbers(root, 0); }
int sumNumbers(TreeNode * root ,int parent) { if(root == NULL) return 0; int current = parent * 10 + root->val; if(root->right == NULL && root->left == NULL) return current ; int left = 0, right = 0; if(root->left != NULL) left = sumNumbers(root->left, current); if(root->right != NULL) right = sumNumbers(root->right,current); return left + right; }
int sumNumbers(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function if(root == 0) return 0; allSum = 0; sumNumbers(root, 0); return allSum; }
int sumNumbers(TreeNode* root) { if (nullptr == root) return 0; int sum = 0; return sumNumbers(root, sum); }
int sumNumbers(TreeNode* root, int sum) { if (nullptr == root) return sum; if (nullptr == root->left && nullptr == root->right) return sum*10 + root->val; int sumLeftChild = sumNumbers(root->left, sum*10 + root->val); int sumRightChild = sumNumbers(root->right, sum*10 + root->val); if (nullptr == root->left) return sumRightChild; if (nullptr == root->right) return sumLeftChild; return sumLeftChild + sumRightChild; }
int sumNumbers(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function ans = 0; sumNumbers(root, 0); return ans; }
int sumNumbers(TreeNode *root) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. if (root==NULL) return 0; int sum = 0; sumNumbers(root, sum, 0); return sum; }
int sumNumbers(TreeNode* root) { vector<int> container; string s; int sum=0; if(!root) return sum; sumNumbers(root,container,s); sum=accumulate(container.begin(),container.end(),sum); return sum; }
int main() { struct TreeNode* root = (struct TreeNode *)calloc(3, sizeof(struct TreeNode)); root->val = 1; root->left = root + 1; root->left->val = 2; root->right = root + 2; root->right->val = 3; /* should be 25 */ printf("%d\n", sumNumbers(root)); return 0; }
int main(int argc, char const *argv[]) { Tree T; T = CreateTree(); PreOrderTraverse(T); printf("\n"); InOrderTraverse(T); printf("\n"); PostOrderTraverse(T); printf("\n"); printf("%d\n", sumNumbers(T)); return 0; }
void case1() { /** * 3 * / \ * 2 1 * / \ \ * 5 4 0 * * 325 + 324 + 310 = 959 */ struct TreeNode* n1 = new_treenode(5, NULL, NULL); struct TreeNode* n2 = new_treenode(4, NULL, NULL); n1 = new_treenode(2, n1, n2); n2 = new_treenode(0, NULL, NULL); n2 = new_treenode(1, NULL, n2); n1 = new_treenode(3, n1, n2); printf("%s: %d\n", __func__, sumNumbers(n1)); }
int sumNumbers(TreeNode* root) { if(root==NULL)return 0; vector<vector<int> >vec; vector<int>vec1; sumNumbers(root,vec,vec1);//这个执行完,那么vec中放了所有根到叶节点的路径.这样可以有助于处理大数的问题 int sum=0; for(int i=0;i<vec.size();i++) { int curSum=0; for(int j=0;j<vec[i].size();j++) { curSum=curSum*10+vec[i][j]; } sum=sum+curSum; } return sum; }
int sumNumbers(TreeNode *root) { return sumNumbers(root, 0); }
int sumNumbers(TreeNode* root) { if(root == NULL) return 0; return sumNumbers(root, 0); }