Given a binary tree, return the tilt of the whole tree.
The tilt of a tree node is defined as the absolute difference between the sum of all left subtree node values and the sum of all right subtree node values. Null node has tilt 0.
The tilt of the whole tree is defined as the sum of all nodes’ tilt.
Example:
Input:
1
/ \
2 3
Output: 1
Explanation:
Tilt of node 2 : 0
Tilt of node 3 : 0
Tilt of node 1 : |2-3| = 1
Tilt of binary tree : 0 + 0 + 1 = 1
Note:
The sum of node values in any subtree won’t exceed the range of 32-bit integer.
All the tilt values won’t exceed the range of 32-bit integer.
思路
每个Tilt node的值是当前node的左右节点的所有值得绝对差值,涉及到子节点的累积值问题,可以运用后序遍历,从子节点开始,判断左右节点的差值之后,将当前节点值更新为当前节点+左右节点值。然后回到父节点,依次操作。
code:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int sum=0;
int findTilt(TreeNode* root) {
post(root);
return sum;
}
void post(TreeNode* root){
if(!root)return ;
int l=0,r=0;
post(root->left);
post(root->right);
if(root->left){
l=root->left->val;
}
if(root->right){
r=root->right->val;
}
sum+=abs(l-r);
root->val +=l+r;
}
};