var sortedArrayToBST = function(nums) {
if (nums.length === 0) return null
const mid = Math.floor(nums.length / 2)
return {
val: nums[mid],
left: sortedArrayToBST(nums.slice(0, mid)),
right: sortedArrayToBST(nums.slice(mid + 1)),
}
}
var isBalanced = function(root) {
const deep = (root) => {
if (root === null) return 0
const leftDeep = deep(root.left)
const rightDeep = deep(root.right)
if (Math.abs(leftDeep - rightDeep) > 1) return Infinity
return Math.max(leftDeep, rightDeep) + 1
}
return deep(root) < Infinity
}
var findOrder = function(numCourses, prerequisites) {
const indegree = new Array(numCourses).fill(0)
const graph = new Array(numCourses).fill([])
const result = []
for (const [a, b] of prerequisites) {
graph[a] = [...graph[a], b]
indegree[b] += 1
}
const queue = []
for (const i in indegree) {
if (indegree[i] === 0) queue.push(i)
}
while(queue.length){
const node = queue.shift()
result.unshift(node)
for (const n of graph[node]){
indegree[n] -= 1
if (indegree[n] === 0) queue.push(n)
}
}
if (!indegree.every(i => i===0)) return []
return result
}