LeetCode 563
Binary Tree Tilt
Problem Description:
给出一棵二叉树,计算每个节点左右子树所有结点值的和,对两个值作差取绝对值,再将所有结点计算得到的绝对值相加。
具体的题目信息:
https://leetcode.com/problems/binary-tree-tilt/description/- Solution:
/**
* 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 findTilt(TreeNode* root) {
if (root == NULL) return 0;
int tilt = 0, front = -1, rear = -1, last = 0;
TreeNode* node[9000];
node[++rear] = root;
while(front<rear) {
TreeNode* p = node[++front];
int l = 0, r = 0;
if (p->left) {
l = TotalSum(p->left);
node[++rear] = p->left;
}
if (p->right) {
r = TotalSum(p->right);
node[++rear] = p->right;
}
tilt += l>r? l-r:r-l;
if (front == last) {
last = rear;
}
}
return tilt;
}
int TotalSum(TreeNode* p) {
int sum = 0;
stack<TreeNode*> node;
while(p || !node.empty()) {
while(p) {
node.push(p);
sum += p->val;
p = p->left;
}
p = node.top();
node.pop();
p = p->right;
}
return sum;
}
};