algorithm notes: leetcode#563 binary tree tilt

Problem


Solution


Initial thoughts

Python implementation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class :
def findTilt(self, root):
"""
:type root: TreeNode
:rtype: int
"""
self._tilt = 0
self.dfs(root)
return self._tilt
def dfs(self, node):
if node is None:
return 0
left = self.dfs(node.left)
right = self.dfs(node.right)
self._tilt += abs(left-right)
return left+right+node.val

Java implementation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class {
private int tilt;
private int dfs(TreeNode node){
if(node == null){ return 0; }
int left = dfs(node.left);
int right = dfs(node.right);
tilt += Math.abs(left-right);
return left+right+node.val;
}
public int findTilt(TreeNode root) {
tilt = 0;
dfs(root);
return tilt;
}
}

Time complexity

O(n).

Space complexity

O(n).


563. Binary Tree Tilt
(中文版) 算法笔记: 力扣#563 二叉树的坡度