Ответ 1
Говоря о дереве, они означают одно и то же: длина самого длинного пути от корня до листового узла.
Я занимаюсь обновлением алгоритмов и структур данных.
Я запутался в концепции глубины и высоты дерева. Во многих случаях, особенно на сайтах, посвященных опросам интервью, мне кажется, что эти термины используются взаимозаменяемо.
Мне кажется, что основная литература определяет их применительно к узлу, а не к дереву.
Таким образом, глубина корня (который является узлом) равна 0
. Высота корня (или любого поднода) - максимальная высота его детей.
Но когда вы применяете эти термины на дереве, т.е. Находите максимальную глубину дерева, кажется, что теперь эти термины "бессмысленны" и могут использоваться взаимозаменяемо, т.е. Для нахождения максимальной глубины просто вычисляют максимальную высоту.
Например, в этом сообщении Проверьте, сбалансировано ли дерево, ответы фокусируются на высоте дерева, тогда как определение баланса может быть на глубине дерева
Правильно ли я понимаю, или я исповедую эти основы?
Говоря о дереве, они означают одно и то же: длина самого длинного пути от корня до листового узла.
Глубина обычно используется для описания свойства узла дерева, а высота используется для описания свойства всего дерева, как в следующих примерах:
Высота дерева определяется как глубина его самого глубокого узла.
глубина - это "насколько глубокий узел" [или как далеко это от корня]. высота - "насколько высока дерево" [или, насколько далеко от нее самый длинный лист)
Формально:
height(v) = 0 v is a leaf
max{height(u)|for every u such that u is a son of v} + 1 else
depth(v) = 0 v root
depth(u) + 1 where u is the parent of v else
EDIT: когда вы ссылаетесь на концепцию максимальной глубины, она идентична высоте дерева [, которая максимальна в корне], вы можете доказать это путем индукции.
Высота узла - это длина самого длинного нисходящего пути к листу от этого узла. Высота корня - высота дерева.
Глубина узла - это длина пути к его корню (т.е. Его корневой путь). Это обычно необходимо при манипулировании различными деревьями с самобалансировкой, в частности, деревьями AVL. Корневой узел имеет нулевую глубину, у листовых узлов высота равна нулю, а дерево с единственным узлом (отсюда и корень и лист) имеет глубину и высоту ноль. Обычно пустое дерево (дерево без узлов, если таковые разрешены) имеет глубину и высоту -1.
Высота дерева - это количество узлов от корня до листа, следующего за самым длинным путем. Итак, если у нас есть один узел (сам корень) height = 1 Пустое дерево: 0
Глубина или уровень любого узла - это количество ребер от корневого узла до этого узла. так что.. корень корня равен 0.
Таким образом, максимальная глубина дерева меньше высоты дерева.
private static int getHeight(BTreeNode n){
if(n == null)
return 0;
int lHeight = getHeight(n.left);
int rheight = getHeight(n.right);
int height = 1+Math.max(lHeight,rheight);
return height;
}
Глубина узла: длина пути от корня до узла. Высота узла: длина пути от узла до самого внутреннего узла (листа).
Но высота и глубина в случае дерева одинаковы. Высота дерева = Глубина дерева = Максимальная высота = Максимальная глубина.
В дереве двоичного поиска
Высота узла относится к Листу - длина самого длинного пути к листовому узлу от исходного узла.
Глубина узла относится к корневому узлу. - общая длина от исходного узла до корневого
Но когда вы говорите вообще о целом дереве, то и другое относится к тому же, оно отличается только тем, что вы берете определенный узел внутри дерева