/**
	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);
     }
 }
Example #3
0
 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);
     
 }
Example #4
0
 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;
}
Example #15
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;
 }
Example #22
0
 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;
 }
Example #23
0
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;
}
Example #25
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);
 }