Я пытаюсь решить проблему, указанную в приведенной ниже ссылке
https://www.hackerrank.com/challenges/binary-search-tree-1/problem
Я написал следующий код. Пожалуйста, помогите мне, где я иду не так.
Select q.Node,case
WHEN q.Node NOT IN q.Parent THEN 'Leaf'
WHEN q.Node IN q.Parent AND q.Node NOT IN q.Higher_Parent THEN 'Inner'
WHEN q.Node IN q.Parent AND q.Node IN q.Higher_Parent THEN 'Root'
END as NodeType
from (
SELECT B1.N as Node,B1.P as Parent,B2.P as Higher_Parent FROM
BST B1 INNER JOIN BST B2
ON B1.P = B2.N
ORDER BY Node ASC
) q
N P HP
1 2 5
2 5 NULL
3 2 5
6 8 5
8 5 NULL
9 8 5
Где я должен изменить приведенный выше код для работы. Конечно, есть другие краткие коды для той же проблемы, но, пожалуйста, помогите мне с этим кодом для обучения цели.
Вам нужно найти child
вместо higher parent
.
Select distinct c.n,
case when c.P is null then 'Root'
when b1.N is null then 'Leaf'
else 'Inner' end
from BST c
left join BST b1
on c.N = b1.P
order by c.n
select n.n,
case
when max(p.n) is null then 'root'
when max(c.n) is null then 'leaf'
else 'inner'
end as type
from bst n
left join bst p on p.n = n.p
left join bst c on c.p = n.n
group by n.n
Результат:
| n | type |
|---|-------|
| 1 | leaf |
| 2 | inner |
| 3 | leaf |
| 5 | root |
| 6 | leaf |
| 8 | inner |
| 9 | leaf |