sql字符串转换为数字求和_转换为求和树

sql字符串转换为数字求和

Problem statement: Given a Binary Tree where each node has positive and negative values. Convert this to a tree where each node contains the sum of the left and right sub trees in the original tree. The values of leaf nodes are changed to 0.

问题陈述:给定二叉树,其中每个节点都有正值和负值。 将其转换为树,其中每个节点都包含原始树中左右子树的总和。 叶子节点的值更改为0。

Example:

例:

For example, the following tree
             10
           /    \
         -2      8
        /  \    / \
       6  -5  -7   5
Should be converted to:
          5(1-2-2+8)
          /        \
       1(6-5)    -2(-7+5)
       /   \       /  \
      0     0     0    0

Sum tree

求和树

A binary tree is said to be converted in sum tree:

据说二叉树将在求和树中转换:

  1. All leaf nodes are converted to 0

    所有叶节点都转换为0

  2. All nodes have the sum of right subtree & left subtree in the original tree

    所有节点在原始树中都有右子树和左子树的总和

Let’s consider,

考虑一下

For any intermediate node having two child at kth level

对于 k级有两个子级的任何中间节点

Value of the node must be updated as

节点的值必须更新为

Sum of right subtree of the node+ sum of left subtree of the node

节点的右子树之和+节点的左子树之和

Now consider both the right & left child has been already converted to their update node values having respective subtree sums up to (k+1)th level (from bottom to (k+1)th level).

现在考虑两个右和左子已被转换为具有相应的子树求和它们的更新节点值高达至(k + 1) 电平(从底部到第(k + 1) 电平)。

So the node value should be updated as: right child value + left child value + subtree sums up to (k+1)th level

因此节点的值应该被更新:右孩子的值+左子值+子树归纳至(k + 1) 水平

=old right child value + old left child value + new left child value (sum of subtrees up to (k+1)th level) + new right child value (sum of subtrees up to (k+1)th level).

=旧右孩子值+旧左子值+新左子值(子树的总和最多至(k + 1) 电平)+新右孩子值(子树的总和最多至(k + 1) 电平)。

So, here we can develop our recursive function to develop the algo

因此,在这里我们可以开发递归函数来开发算法

FUNCTION toSumTree (node)
    1.  Check base case
        IF (node==NULL)
            Return 0;
    2.  Store old value of node
    3.  Update node value to left subtree sum + right 
        subtree sum. Use recursion to find subtree sums
    4.  Return old node value + current node value for 
        upper levels ( towards root)
END FUNCTION


转换为求和树的C ++实现 (C++ implementation for Transform to Sum Tree)

#include <bits/stdc++.h>
using namespace std;

// tree node is defined
class tree{    
	public:
		int data;
		tree *left;
		tree *right;
};

//convert to sum tree
int toSumTree(tree *node){ 
	if(!node) //base case 
		return 0;
	
	//store old value
	int temp=node->data; 
	
	//update to new value
	node->data=toSumTree(node->left)+toSumTree(node->right); 
	
	//return for upper level sums
	return node->data+temp; 
}


//printing the tree using level order traversal
void printTree(tree* root){
	queue<tree*> q;  // using stl
	tree* temp;
	q.push(root);
	q.push(NULL);
	cout<<"root\n";
	while(!q.empty()){
		temp=q.front();
		q.pop();
		if(temp==NULL){
			if(!q.empty()){
				cout<<"\nnext level\n";
				q.push(NULL);
			}
		}
		else{
			cout<<temp->data<<" ";  //print node
			if(temp->left)
				q.push(temp->left); //EnQueue
			if(temp->right)
				q.push(temp->right); //EnQueue
		}
	}
}

// creating new node
tree* newnode(int data)  
{ 
	tree* node = (tree*)malloc(sizeof(tree)); 
	node->data = data; 
	node->left = NULL; 
	node->right = NULL; 
	return(node); 
} 


int main() 
{ 
	//**same tree is builted as shown in example**
	cout<<"same tree is built as shown in example\n";
	tree *root=newnode(10); 
	root->left= newnode(-2); 
	root->right= newnode(8); 
	root->right->right=newnode(5);
	root->right->left=newnode(-7);
	root->left->left=newnode(6); 
	root->left->right=newnode(-5);

	cout<<"printing the original tree...\n"; 
	printTree(root);

	toSumTree(root);
	cout<<"\nprinting the converted tree...\n";
	printTree(root);

	return 0; 
} 

Output

输出量

same tree is built as shown in example
printing the original tree...
root
10
next level
-2 8
next level
6 -5 -7 5
printing the converted tree...
root
5
next level
1 -2
next level
0 0 0 0


Explanation with example:

举例说明:

Let’s see how the function solves the above example.

让我们看看该函数如何解决上述示例。

Original tree:
             10
           /    \
        -2       8
       /   \    /  \
     6    -5   -7    5
In the main function it calls toSumTree (10)
------------------------------------------------------------

toSumTree (10) //call at Main()
node is not NULL
temp=10
new node value = toSumTree (10->left) + toSumTree (10->right)
=toSumTree (-2) + toSumTree (8)
Thus call to toSumTree (-2) and toSumTree (8)
Return new node value + temp (10)
------------------------------------------------------------

toSumTree (-2) //call at toSumTree (10)
node is not NULL
temp=-2
new node value = toSumTree (-2->left) + toSumTree (-2->right)
=toSumTree (6) + toSumTree (-5)
Thus call to toSumTree (6) and toSumTree (-5)
Return new node value + temp (-2)
------------------------------------------------------------

toSumTree (8) //call at toSumTree (10)
node is not NULL
temp=8
new node value = toSumTree (8->left) + toSumTree (8->right)
=toSumTree (-7) + toSumTree (5)
Thus call to toSumTree (-7) and toSumTree (5)
Return new node value + temp (8)
------------------------------------------------------------

toSumTree (6) //call at toSumTree (-2)
node is not NULL
temp=6
new node value = toSumTree (6->left) + toSumTree (6->right)
=toSumTree (NULL) + toSumTree (NULL)
Thus call to toSumTree (NULL) and toSumTree (NULL)
Return new node value + temp (6)
------------------------------------------------------------

toSumTree (-5) //call at toSumTree (-2)
node is not NULL
temp=-5
new node value = toSumTree (-5->left) + toSumTree (-5->right)
=toSumTree (NULL) + toSumTree (NULL)
Thus call to toSumTree (NULL) and toSumTree (NULL)
Return new node value + temp (-5)
------------------------------------------------------------

toSumTree (-7)//call at toSumTree(8)
node is not NULL
temp=-7
new node value = toSumTree (-7->left) + toSumTree (-7->right)
=toSumTree (NULL) + toSumTree (NULL)
Thus call to toSumTree (NULL) and toSumTree (NULL)
Return new node value + temp (-7)
------------------------------------------------------------

toSumTree (5)//call at toSumTree (8)
node is not NULL
temp=5
new node value = toSumTree (5->left) + toSumTree (5->right)
=toSumTree (NULL) + toSumTree (NULL)
Thus call to toSumTree (NULL) and toSumTree (NULL)
Return new node value + temp (5)
------------------------------------------------------------

toSumTree (NULL)//call at toSumTree(6)
node is NULL
return 0
------------------------------------------------------------

toSumTree (NULL)//call at toSumTree (6)
node is NULL
return 0
------------------------------------------------------------

toSumTree (NULL)//call at toSumTree(-5)
node is NULL
return 0
------------------------------------------------------------

toSumTree (NULL)//call at toSumTree(-5)
node is NULL
return 0
------------------------------------------------------------

toSumTree (NULL)//call at toSumTree(-7)
node is NULL
return 0
------------------------------------------------------------

toSumTree (NULL)//call at toSumTree(-7)
node is NULL
return 0
------------------------------------------------------------

toSumTree (NULL)//call at toSumTree(5)
node is NULL
return 0
------------------------------------------------------------

toSumTree (NULL)//call at toSumTree(5)
node is NULL
return 0


At toSumTree (6) //call at toSumTree(-2)
new node value = toSumTree (6->left) + toSumTree (6->right)
=toSumTree (NULL) + toSumTree (NULL)
=0
6->0
It returns 0+6=6
------------------------------------------------------------

At toSumTree (-5) //call at toSumTree(-2)
new node value = toSumTree (-5->left) + toSumTree (-5->right)
=toSumTree (NULL) + toSumTree (NULL)
=0
-5->0
It returns 0-5=-5
------------------------------------------------------------

At toSumTree (-7) //call at toSumTree(8)
new node value = toSumTree (-7->left) + toSumTree (-7->right)
=toSumTree (NULL) + toSumTree (NULL)
=0
-7->0
It returns 0-7=-7
------------------------------------------------------------

At toSumTree (5) //call at toSumTree (8)
new node value = toSumTree (5->left) + toSumTree (5->right)
=toSumTree (NULL) + toSumTree (NULL)
=0
5->0
It returns 0+5=5
------------------------------------------------------------

At toSumTree (-2) //call at toSumTree(10)
new node value = toSumTree (-2->left) + toSumTree (-2->right)
=toSumTree (6) + toSumTree (-5)
=6 + (-5) =1
-2->1
It returns -2+1=-1
------------------------------------------------------------

At toSumTree (8) //call at toSumTree (10)
new node value = toSumTree (-8->left) + toSumTree (-8->right)
=toSumTree (-7) + toSumTree (5)
=-7 + (5) =-2
8->-2
It returns -2+8=6
------------------------------------------------------------

At toSumTree (10) //call at main
new node value = toSumTree (10->left) + toSumTree (10->right)
=toSumTree (-2) + toSumTree (8)
=-1 + 6=5
10->5
It returns 10+5=15

So, the binary tree is sum converted to:
             5
          /      \
         1        -2
       /   \      /   \
     0      0     0    0


翻译自: https://www.includehelp.com/icp/transform-to-sum-tree.aspx

sql字符串转换为数字求和

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值