563. Binary Tree Tilt
问题:
求BTree的Tilt.
节点的tilt定义为左右子树的数值和的绝对差值. 树的Tilt为所有节点的tilt之和.
思路:
先得到树的tilt需要对节点求tilt, 对节点求tilt需要求出左右子树之和. 需要分左右子树并且从下向上遍历求和,最后到跟节点.
分为两个过程: 1, 对左右子树求和; 2, 求节点的tilt之和.
后序遍历比较适合.
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 viaPostTraversal(TreeNode* root, int& result) {
if (!root)
return 0;
int left = viaPostTraversal(root->left, result);
int right = viaPostTraversal(root->right, result);
result += abs(left - right);
return left + right + root->val;
}
int findTilt(TreeNode* root) {
int result = 0;
viaPostTraversal(root, result);
return result;
}
};