이진 트리의 노드의 타입을 출력하기
- 칼럼 N은 노드 이름, 칼럼 P는 노드의 부모 노드 (NULL은 없다는 뜻)
- 자식이 없는 노드는 Leaf, 부모가 없는 노드는 Root, 둘 다 있는 노드는 Inner
CASE-WHEN
절 사용하여 조건별로 맞게 출력하기SET
, Group-Concat
SET @list = (select group_concat(distinct P) from BST);
select * from bst where n in (@list);
-- 혹은
select group_concat(distinct p, seperator ',')
from BST where p is not null
when (P is null) then 'Root'
구문을 Inner 다음에 써주면 제대로 작동하지 않고, P가 Null인 N값에도 Inner가 출력된다. 왜지?distinct P
가져올때 P가 Null
값도 있으므로, where P is not null
조건을 붙여주는 것이 중요하다. Null이 빠져야 제대로 동작한다. select N,
case
when (P is null) then 'Root'
when(N in (select distinct P from BST
where P is not null)) then 'Inner'
else 'Leaf'
end as case_result
from BST
order by N