Классификация узлов двоичного дерева с использованием SQL

0

Я пытаюсь решить проблему, указанную в приведенной ниже ссылке

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

Где я должен изменить приведенный выше код для работы. Конечно, есть другие краткие коды для той же проблемы, но, пожалуйста, помогите мне с этим кодом для обучения цели.

Теги:

2 ответа

0

Вам нужно найти 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
0
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 |

Демо: http://sqlfiddle.com/#!9/ba3c76/1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню