# Write The Shortest Program To Check If A Binary Tree Is Balanced

## Jelly, 11 bytes

```
ḊµŒḊ€IỊ;ß€Ạ
```

Try it online!

The empty tree is represented by `[]`

.

## Prolog (SWI), 49 bytes

```
N+_/B/C:-X+B,Y+C,abs(X-Y)<2,N is max(X,Y)+1.
0+e.
```

Try it online!

Represents trees as `Value/Left_Child/Right_Child`

, with the empty tree being the atom `e`

. Defines `+/2`

, which outputs through success or failure, with an unbound variable (or one already equal to the tree's height) on the left and the tree on the right--if the height argument is unacceptable, add 9 bytes to define `-T:-_+T.`

.

```
N + _/B/C :- % If the second argument is a tree of the form _Value/B/C,
X+B, % X is the height of its left child which is balanced,
Y+C, % Y is the height of its right child which is balanced,
abs(X-Y) < 2, % the absolute difference between X and Y is strictly less than 2,
N is max(X,Y)+1. % and N is the height of the full tree.
0 + e. % If, on the other hand, the second argument is e, the first is 0.
```

## JavaScript (Node.js), 49 bytes

```
h=([l,r])=>l?(d=h(l)-h(r))*d<2?1+h(d>0?l:r):NaN:1
```

Try it online!

-9 bytes by Arnauld.

## JavaScript, 58 bytes

```
h=([l,r])=>l?(l=h(l),r=h(r),m=l>r?l:r,m+m-l-r<2?m+1:NaN):1
```

Try it online!

Use `[]`

for null, and `[left, right, value]`

for nodes.