题意
给一个二叉树,求二叉树的tilt之和。
tilt定义为:对于某个节点,其tilt为左子树的和 - 右子树的和的绝对值
思路
递归求左右子树的和。
对于某个节点,以其为根节点的子树的和为:左子树的和 + 右子树的和 + 当前节点的值
在递归的过程中,将abs(左子树的和 - 右子树的和)累加进tilt即可
代码
/**
* 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 {
private:
int sum = 0;
public:
int dfs(TreeNode* root) {
if (!root) return NULL;
int val1 = dfs(root->left);
int val2 = dfs(root->right);
sum += abs(val1 - val2);
return val1 + val2 + root->val;
}
int findTilt(TreeNode* root) {
dfs(root);
return sum;
}
};