Skip to content

Commit 06283d6

Browse files
authored
Update 2313-minimum-flips-in-binary-tree-to-get-result.js
1 parent 220cc1b commit 06283d6

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

2313-minimum-flips-in-binary-tree-to-get-result.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,65 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val, left, right) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.left = (left===undefined ? null : left)
6+
* this.right = (right===undefined ? null : right)
7+
* }
8+
*/
9+
/**
10+
* @param {TreeNode} root
11+
* @param {boolean} result
12+
* @return {number}
13+
*/
14+
const minimumFlips = function(root, result) {
15+
const dp = new Map()
16+
return dfs(root, result)
17+
18+
function dfs(node, expected) {
19+
if(node.val === 0 || node.val === 1) {
20+
return (!!node.val) === !!expected ? 0 : 1
21+
}
22+
if(dp.has(node) && dp.get(node).has(expected)) {
23+
return dp.get(node).get(expected)
24+
}
25+
let res = Infinity
26+
27+
if(node.val === 2) {
28+
if(expected) {
29+
res = Math.min(dfs(node.left, 1), dfs(node.right, 1))
30+
} else {
31+
res = dfs(node.left, 0) + dfs(node.right, 0)
32+
}
33+
} else if(node.val === 3) {
34+
if(expected) {
35+
res = dfs(node.left, 1) + dfs(node.right, 1)
36+
} else {
37+
res = Math.min(dfs(node.left, 0), dfs(node.right, 0))
38+
}
39+
} else if(node.val === 4) {
40+
if(expected) {
41+
res = Math.min(dfs(node.left, 0) + dfs(node.right, 1), dfs(node.left, 1) + dfs(node.right, 0))
42+
} else {
43+
res = Math.min(dfs(node.left, 1) + dfs(node.right, 1), dfs(node.left, 0) + dfs(node.right, 0))
44+
}
45+
46+
} else if(node.val === 5) {
47+
const child = node.left || node.right
48+
if(expected) {
49+
res = dfs(child, 0)
50+
} else {
51+
res = dfs(child, 1)
52+
}
53+
}
54+
55+
if(!dp.has(node)) dp.set(node, new Map())
56+
dp.get(node).set(expected, res)
57+
return res
58+
}
59+
};
60+
61+
// another
62+
163
/**
264
* Definition for a binary tree node.
365
* function TreeNode(val, left, right) {

0 commit comments

Comments
 (0)