Чем определяется высота дерева?

Кажется, я не могу найти однозначного ответа на этот вопрос, я пытаюсь сделать некоторые элементарные доказательства в кучах, но вот что меня немного сбивает с толку:

Действительно ли пустое дерево? Если да, то какова его высота?
Я думаю, что это будет 0.

Какова высота дерева с одним узлом?
Я думаю, что это будет 1, но я видел определения, где она равна 0 (и если это так, то я не знать, как учитывать пустое дерево).


person Brad    schedule 05.02.2010    source источник


Ответы (7)


Я думаю, вам следует взглянуть на Словарь алгоритмов и структур данных на сайте НИСТ. В определении высоты говорится, что один узел имеет высоту 0.

определение допустимого дерева включает пустую структуру. На сайте не указана высота такого дерева, но исходя из определения высоты, она тоже должна быть равна 0.

person nlucaroni    schedule 05.02.2010
comment
Спасибо, приятно иметь надежный источник, на который можно ссылаться (не думайте, что профессор или рецензент сочтут Википедию приемлемым источником). Однако их определения кажутся немного противоречивыми, они определяют дерево либо как пустое (без узлов), либо как корень и ноль или более поддеревьев. Но их определение высоты определяется корневым узлом. - person Brad; 05.02.2010
comment
Я согласен. Я думаю, вам определенно следует написать ему по электронной почте (чтобы вас могли процитировать на этой странице за то, что вы подняли это различие). Но учитывая, что определение подразумевает максимальное количество ребер от корня до листа, мы должны сказать, что пустое дерево имеет высоту 0. - person nlucaroni; 05.02.2010
comment
Я только что проверил нового Кормена, и он тоже не делает различий (стр. 1177). - person nlucaroni; 05.02.2010
comment
Я бы сказал, что высота пустого дерева либо -1, либо -бесконечность. Точно не 0. - person Thomas; 05.02.2010
comment
Я думаю, не имея авторитетного источника для цитирования, я скажу, что пустое дерево имеет неопределенную высоту. Таким образом, количество узлов в полном бинарном дереве высоты h находится между 2^h и 2^(h+1)-1. И если вы перевернете его, чтобы найти h на основе n, вы в конечном итоге получите log2 (0) = undefined, когда дерево пусто. Это дает аккуратное определение и, по крайней мере, довольное доказательство. - person Brad; 05.02.2010
comment
Высота пустого дерева не определена. Высота дерева - это высота корневой ноты этого дерева (которая равна единице плюс максимальная высота его дочерних элементов или ноль, если у него нет дочерних элементов). Пустое дерево не имеет корневого узла, поэтому нельзя сказать, что оно имеет высоту. - person yfeldblum; 20.10.2010
comment
На самом деле новое определение говорит, что высота пустого дерева не определено. - person hencrice; 06.01.2014
comment
FWIW, CLR, похоже, страдает от страха перед нулевым значением. Кнут предполагает (хотя это ссылка мимоходом), что пустое дерево должно иметь нулевую высоту. Решение NIST последовать примеру CLR неудачно; это излишне усложняет код, который хочет использовать понятие высоты. - person John Clements; 11.05.2017

Высота дерева — это длина пути от корня этого дерева до его самого дальнего узла (т. е. самого дальнего от корня листового узла).

Дерево с одним корневым узлом имеет высоту 0, а дерево с нулевыми узлами будет считаться пустым. Пустое дерево имеет высоту -1. Пожалуйста, проверьте это.

Надеюсь, это поможет.

person Arnkrishn    schedule 05.02.2010
comment
Я считаю, что это вопрос соглашения, используемого при реализации. Поскольку все положительные значения высоты и нулевое значение высоты будут представлены, когда у вас есть один или несколько узлов в дереве, у вас должно быть что-то для представления пустого дерева. Таким образом, соглашение имеет значение -1. Вы можете иметь его как любое другое отрицательное значение. Это вопрос реализации как фактической абстракции структуры данных - дерево не покрывает эти вещи. - person Arnkrishn; 06.02.2010
comment
Соглашение о пустом дереве, имеющем высоту -1, на самом деле имеет некоторое практическое применение в деревьях AVL, поскольку оно упрощает вычисление коэффициента баланса и когда чередовать дочерние элементы. Эта реализация показывает это на практике: users.cis.fiu. edu/~weiss/dsaajava/code/DataStructures/ - person ; 20.05.2014

Я видел, как он использовался в обоих случаях (считая один узел как 0 или 1), но большинство источников определяли бы дерево только для корня как дерево высоты 0 и не считали бы дерево с 0 узлами действительным.

person Max Shawabkeh    schedule 05.02.2010

Если ваше дерево представляет собой рекурсивно определенную структуру данных, которая может быть либо пустой, либо узлом с левым и правым поддеревом (например, деревьями поиска или вашей кучей), то естественным определением является присвоение 0 пустому дереву и 1 + высоту самого высокого поддерева в непустое дерево.

Если ваше дерево представляет собой граф, то естественным определением является самый длинный путь от корня к листу, поэтому дерево, состоящее только из корней, имеет глубину 0. Обычно в этом случае вы даже не рассматриваете пустые деревья.

person starblue    schedule 05.02.2010
comment
Я хотел бы отметить, что (а) вы, очевидно, правы, и (б) NIST и многие другие люди не видят вещи (вам) по-нашему. Я считаю, что такое неблагоприятное положение дел главным образом связано с CLR, которая страдает от страха перед нулевым значением. - person John Clements; 11.05.2017

Высота дерева — это длина самого длинного пути к конечному узлу в любом из его дочерних элементов.

Википедия говорит, что высота пустого дерева равна -1. Я не согласен. Пустое дерево — это просто дерево, содержащее один конечный узел (нулевое или специальное значение, представляющее пустое дерево). Поскольку у узла нет потомков, длина его самого длинного пути должна равняться пустому сумма = 0, а не -1.

Точно так же непустое дерево имеет двух дочерних элементов, поэтому по определению существует по крайней мере путь >= 1 к конечному узлу.

Мы можем определить наше дерево следующим образом:

type 'a tree =
    | Node of 'a tree * 'a * 'a tree
    | Nil

let rec height = function
    | Node(left, x, right) -> 1 + max (height left) (height right)
    | Nil -> 0
person Juliet    schedule 05.02.2010
comment
Пустое дерево — это просто дерево, содержащее один конечный узел. Нет, даже пустее, чем это... - person Thomas; 05.02.2010

Согласно Википедии, высота (под)дерева с одним единственным узел равен 0. Высота дерева без узлов будет равна -1. Но я думаю, что вам решать, как вы определяете высоту, и ваши доказательства должны работать с любым определением.

person MartinStettner    schedule 05.02.2010

на самом деле идеальным определением высоты дерева является d уровень листа d самого длинного пути от корня плюс 1..согласно 2 это определение дерева пусто, оно не имеет никакого уровня и не может считать, что оно имеет нулевой уровень, потому что уровень корня s ноль .. таким образом, уровень пустого дерева равен -1, чем в соответствии с определением 2, его -1 + 1 = 0 .. поэтому НОЛЬ sd высота пустого дерева ... но много книг, которые они дали -1, но никаких объяснений не дано

person angad    schedule 20.10.2010