Given the root of a binary tree, return the sum of every tree node’s tilt.
The tilt of a tree node is the absolute difference between the sum of all left subtree node values and all right subtree node values. If a node does not have a left child, then the sum of the left subtree node values is treated as 0. The rule is similar if there the node does not have a right child.
计算二叉树的每个节点倾斜度的和,倾斜度是指左子树节点值的和 减去 右子树节点值的和。
思路:
遍历每个节点的时候要两种信息,
一个是每个节点左子树和右子树节点值的差,也就是倾斜度,要把这些加起来。这个可以加在全局变量。
一个是左子树和右子树节点值的和,再加上节点本身求和,这是方便上级节点算倾斜度的。考虑这点,用树的后序遍历。
class Solution {
int sum = 0;
public int findTilt(TreeNode root) {
postTraversal(root);
return sum;
}
int postTraversal(TreeNode root){
if(root == null) return 0;
int left = postTraversal(root.left);
int right = postTraversal(root.right);
sum += Math.abs(left - right);
return left+right+root.val;
}
}