// inefficient depth(node): if node == null: return 0 return 1 + max(depth(node.left), depth(node.right)) is-balanced-bt(node): if node == null: return true depthleft = depth(node.left) depthright = depth(node.right) if abs(depthleft - depthright) > 1: return false return is-balanced-bt(node.left) && is-balanced-bt(node.right)
A better way is to "bubble up" the depth. For a node, if the difference in depth for left and right is 1+ then return null instead. If depth for either left or right is null then bubble null up.
// efficient depth(node): if node == null: return 0 depthleft = depth(node.left) if depthleft == null return null depthright = depth(node.right) if depthright == null return null if abs(depthleft - depthright) > 1: return null return 1 + max(depthleft, depthright) is-balanced-bt(node): return depth(node) != null
No comments:
Post a Comment