题意
求每个节点的左子树的节点之和和右子树节点之和的差的绝对值
思路
- 其实就是二叉树高度的变种,在二叉树高度的题目里面求的是左右子树的高度,这里求的是子树的节点之和,先看求二叉树高度的代码??
public int maxDepth(TreeNode root) {
if(root == null) return 0;
int left = maxDepth(root.left);
int right = maxDepth(root.right);
return 1 + Math.max(left, right);
}
- 要修改的地方是
return
的东西,此时不是要求二叉树的高度,而是要求节点之和,而节点之和显然等于左子树的节点之和 + 右子树节点之和 + 当前节点的值 - 另外因为要计算所有节点的所以要多一句计算语句
代码(Java)
class Solution {
private int sumDegree = 0;
private int calculate(TreeNode root) {
if(root == null) return 0;
int left = calculate(root.left);
int right = calculate(root.right);
sumDegree += Math.abs(left - right);
return left + right + root.val;
}
public int findTilt(TreeNode root) {
int allDegree = calculate(root);
return sumDegree;
}
}
代码(Python)
class Solution:
sumDegree = 0
def findTilt(self, root: TreeNode) -> int:
def calculate(root):
if not root: return 0
left = calculate(root.left)
right = calculate(root.right)
self.sumDegree += abs(left - right)
return left + right + root.val
calculate(root)
return self.sumDegree