나무 깊이와 높이의 차이는 무엇입니까?


262

이것은 알고리즘 이론의 간단한 질문입니다.
이들의 차이점은 루트와 콘크리트 노드 사이의 최단 경로에서 노드 수와 다른 수의 가장자리를 계산한다는 것입니다.
어느 게 어느 건지?


78
팁 : 용어 간의 혼동을 피하려면 : 1. 신장 : 사람의 신장을 측정한다고 상상해보십시오. 발가락에서 머리까지 (잎에서 뿌리까지). 2. 깊이 : 바다의 깊이를 측정한다고 상상해보십시오. 지표면에서 해저까지 (뿌리에서 잎까지).

@Yesh 이것은 훌륭한 비유입니다.
특수 문자

1
@Yesh의 탁월한 비유를 추가하려면 트리의 중간에있는 내부 노드의 경우 깊이는 루트 노드 아래의 레벨 수이며 높이는 최상위 하위 노드 위의 레벨 수입니다.
토마스 Nguyen Nguyen

답변:


664

깊이와 높이는 노드의 속성이라는 것을 배웠습니다 .

  • 노드 의 깊이 는 노드에서 트리의 루트 노드까지의 가장자리 수입니다.
    루트 노드의 깊이는 0입니다.

  • 노드 의 높이는 노드에서 리프까지 가장 긴 경로 의 가장자리 수입니다 .
    리프 노드의 높이는 0입니다.

나무의 속성 :

  • 높이 나무는 루트 노드의 높이 것
    또는 동등의 깊은 노드의 깊이.

  • 직경 (또는 나무의가)의 수 의 노드 두 잎 노드 사이의 가장 긴 경로에. 아래 나무의 지름은 6 노드입니다.

각 노드의 높이와 깊이를 가진 나무


21
+1은 여기에서 동일한 내용의 인용문을 추가하려고합니다. en.wikipedia.org/wiki/Tree_%28data_structure%29
Péter Török

2
그 수단 높이 == 최대 깊이
roottraveller

6
@rkm_Hodor : 그렇습니다 . 나무 의 높이는 항상 가장 깊은 노드 의 깊이 와 같습니다 .
Daniel AA Pelsmaeker

1
나무의 지름이 가장자리 대신 노드를 계산한다는 주장의 출처를 인용 해 주시겠습니까? 이것은 가장 긴 경로를 요구 하는 그래프 직경의 일반적인 정의 (예 : en.wikipedia.org/wiki/Distance_(graph_theory) 참조 ) 와 충돌 합니다.
j_random_hacker

1
@j_random_hacker 정의의 문제입니다. 가장 유용한 것을 선택하십시오. 꼭짓점의 수에서 가장자리 수로 가져 오려면 1을 빼십시오. 나는 꼭짓점의 수를 세는 것을 선호합니다. 이로 인해 너비가 1 인 노드 하나만 있고 너비가 0 인 빈 그래프가 나타납니다 . mathworld. wolfram.com/GraphDiameter.html
Daniel AA Pelsmaeker

44

나무의 높이와 깊이는 같습니다 ...

그러나 노드의 높이와 깊이는 같지 않기 때문에 ...

주어진 노드에서 가능한 가장 깊은 리프로 이동하여 높이가 계산됩니다.

깊이는 루트에서 주어진 노드까지 순회에서 계산됩니다 .....


4
"높이는 잎에서 주어진 노드로 순회하여 계산됩니다"정확하지 않습니다. 잎은 주어진 노드의 모든 잎 중에서 가장 깊은 잎이어야합니다.
mightyWOZ

14

Cormen et al.에 따르면 알고리즘 소개 (부록 B.5.3)에서 트리 T의 노드 X 깊이는 T의 루트 노드에서 X까지의 간단한 경로 (가장자리 수)의 길이로 정의됩니다. 노드 Y의 높이는 Y에서 잎까지 가장 긴 하향 단순 경로 의 모서리 수입니다 . 나무의 높이는 루트 노드의 높이로 정의됩니다.

단순 경로는 반복 정점이없는 경로입니다.

(A)의 신장 트리 (A)의 최대 깊이와 동일하다 트리 . 노드의 깊이와 노드의 높이가 반드시 같을 필요는 없습니다. Cormen et al.의 3 판의 그림 B.6을 참조하십시오. 이러한 개념을 설명합니다.

때로는 가장자리 대신 노드 (정점)를 계산하도록 요청하는 데 문제가 있으므로 시험이나 면접 중에 노드 또는 가장자리를 계산 해야하는지 확실하지 않은 경우 설명을 요청하십시오.


노드와 가장자리를 세는 데 차이가 있습니까? 둘 다 같은 결과를 줄 것 같습니다. 내가 틀렸다면 나를 바로 잡으십시오.
VINOTH ENERGETIC

@jdhao 어떻게 루트의 깊이가 2가 될 수 있습니까? 0 (가장자리가 고려되는 경우) 또는 1 (노드가 고려되는 경우)입니다.
neowulf33

@ neowulf33, 예, 정말 잘못되었습니다. 루트 노드의 깊이는 0이어야합니다. 사람들을 혼동하지 않기 위해 주석을 삭제합니다.
jdhao

2

간단한 답 :
깊이 :
1. 나무 : 루트 노드에서 나무의 잎 노드까지 의 가장자리 / 호의 수 를 나무의 깊이라고합니다.
2. Node : 루트 노드에서 해당 노드까지 의 모서리 / 호수 를 해당 노드의 깊이라고합니다.


2

이러한 개념을 이해하는 또 다른 방법은 다음과 같습니다. 깊이 : 루트 위치에 수평선을 그리고이 선을지면으로 취급합니다. 따라서 루트의 깊이는 0이고 모든 하위 노드는 아래쪽으로 자라므로 각 노드 레벨은 현재 깊이 + 1을 갖습니다.

높이 : 같은 수평선이지만 이번에는 지상 위치는 나무의 잎인 외부 노드입니다.


2

저학년 CS 학생이기 때문에이 게시물을 만들고 싶었습니다. OpenDSA 및 기타 오픈 소스 교재를 점점 더 많이 사용하고 있습니다. 높이와 깊이를 가르치는 방식이 한 세대에서 다음 세대로 바뀌 었다는 최고 등급의 답변처럼 보입니다.이 게시물을 게시하여 모든 사람들 이이 불일치가 존재하고 희망적으로 어떤 버그도 일으키지 않을 것이라는 것을 알고 있습니다 프로그램들! 감사.

로부터 OpenDSA 데이터 구조 및 Algos 책 :

n 1 , n 2 , ..., n k 가 트리에서 노드의 시퀀스이므로 n i 가 1 <= i <k에 대한 n i +1 의 부모 인 경우이 시퀀스를 n의 경로라고합니다. 1 내지 n k . 경로의 길이는 k-1입니다. 노드 R에서 노드 M까지의 경로가있는 경우 R은 M의 조상이고 M은 R의 자손입니다. 따라서 트리의 모든 노드는 트리의 루트의 자손이며 루트는 상위입니다. 모든 노드의. 트리에서 노드 M의 깊이는 트리의 루트에서 M까지의 경로 길이입니다. 트리의 높이는 트리에서 가장 깊은 노드의 깊이보다 하나 더 큽니다.깊이 d의 모든 노드는 트리에서 레벨 d에 있습니다. 루트는 레벨 0에서 유일한 노드이며 깊이는 0입니다.

그림 7.2.1

그림 7.2.1 : 이진 트리. 노드 A가 루트입니다. 노드 B와 C는 A의 자녀입니다. 노드 B와 D는 함께 서브 트리를 형성합니다. 노드 B에는 두 개의 자식이 있습니다. 왼쪽 자식은 빈 트리이고 오른쪽 자식은 D입니다. 노드 A, C 및 E는 G의 조상입니다. 노드 D, E 및 F는 트리의 레벨 2를 구성합니다. 노드 A는 레벨 0에 있습니다. A에서 C로, E에서 G 로의 가장자리는 길이 3의 경로를 형성합니다. 노드 D, G, H 및 I는 나뭇잎입니다. 노드 A, B, C, E 및 F는 내부 노드입니다. I의 깊이는 3입니다.이 나무의 높이는 4입니다.


가치있는 것을 위해이 링크의 정의는 다음과 같이 변경되었습니다 : "트리에서 노드 M의 깊이는 트리의 루트에서 M까지의 경로 길이입니다. 트리의 높이는 트리의 깊이입니다. 나무에서 가장 깊은 노드. "
kaya3
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.