给定一个二叉树,返回整棵树的倾斜程度。
一个节点的倾斜程度定义:左子树的所有节点和,与右子树所有节点和的绝对值差。空节点的倾斜程度定义为0。
整棵树的倾斜程度定义:所有节点的倾斜程度之和。
样例
样例 1:
输入:
{1,2,3}
输出: 1
解释:
1
/ \
2 3
节点2的倾斜程度 : 0
节点3的倾斜程度 : 0
节点1的倾斜程度 : |2-3| = 1
整棵树的倾斜程度 : 0 + 0 + 1 = 1
**样例 2: **
输入:
{1,1,#,2,3}
输出:
7
解释:
1
/
1
/ \
2 3
注意事项
- 任何子树的所有节点和不会超过32位整数的范围。
- 所有的倾斜程度值,不会超过32位整数的范围。
输入测试数据 (每行一个参数)如何理解测试数据?
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: the root
* @return: the tilt of the whole tree
*/
int ret;
int findTilt(TreeNode * root)
{
// Write your code here
ret = 0;
bianli(root);
return ret;
}
void bianli(TreeNode * root)
{
if(root != NULL)
{
int left = sum(root->left);
int right = sum(root->right);
//ret = //max(ret, abs(left-right));
ret += abs(left-right);
bianli(root->left);
bianli(root->right);
}
}
int sum(TreeNode* root)
{
if(root == NULL)
return 0;
return sum(root->left) + sum(root->right) + root->val;
}
};