木の深さと高さの違いは何ですか?


262

これはアルゴリズム理論からの簡単な質問です。
それらの違いは、1つのケースではルートの数と、ノードと具象ノードとの間の最短経路上の他の数のエッジの数を数えることです。
どっち?


78
ヒント:用語間の混乱を避けるために:1.高さ:人の高さを測定することを想像して、つま先から頭(葉から根)まで測定します。2.深さ:海の深さを測定することを想像してください。地表から海底まで(根から葉まで)行います。
はい、

@はいこれは素晴らしいアナロジーです。
特殊文字

1
@Yeshの優れたアナロジーに追加すると、ツリーの中央にある内部ノードの場合、深さはルートノードの下にあるレベルの数であり、高さは最下位の子ノードの上にあるレベルの高さです。
Thomas Nguyen

回答:


664

深度と高さがノードのプロパティであることを学びました:

  • ノードの深さは、ノードからツリーのルートノードまでのエッジの数です。
    ルートノードの深さは0になります。

  • ノードの高さは、ノードからリーフまでの最長パス上のエッジの数です。
    葉ノードの高さは0になります。

木の特性:

  • 木のは、そのルート・ノードの高さとなり
    、または同等に、その最も深いノードの深さ。

  • ツリーの直径(または)は、2つのリーフノード間の最長パス上のノード数です。以下のツリーの直径は6ノードです。

各ノードの高さと深さを持つツリー


21
+1はこちらから同じ内容の引用符を追加しようとしていました:en.wikipedia.org/wiki/Tree_%28data_structure%29
ペーテルTörök

2
つまり、高さ==最大の深さを意味します
ルートトラベラー

6
@rkm_Hodor:はい、木の高さは常に最も深いノードの深さと等しくなります。
Daniel AA Pelsmaeker

1
ツリーの直径がエッジではなくノードを数えるというあなたの主張の出典を引用していただけませんか?これは、最長のパスを要求するグラフの直径の通常の定義(たとえば、en.wikipedia.org/wiki/Distance_ ( graph_theory)を参照)と競合します。
j_random_hacker 2018年

1
@j_random_hacker定義の問題です。あなたにとって最も役立つものを選んでください。頂点の数からエッジの数を求めるには、1を引くだけです。頂点の数を数えると、幅が1のノードが1つだけのグラフと、幅が0の空のグラフになります。 wolfram.com/GraphDiameter.html
Daniel AA Pelsmaeker 2018年

44

木の高さと深さは等しい...

しかし、ノードの高さと深さは等しくありません...

高さは、指定されたノードから最も深い葉までトラバースすることによって計算されます。

深さは、ルートから指定されたノードへのトラバーサルから計算されます。


4
「高さは葉から指定されたノードへのトラバースによって計算されます」これは正しくありません。葉は、指定されたノードのすべての葉の中で最も深いものでなければなりません。
mightyWOZ 2016

14

コーメンらによると。アルゴリズムの概要(付録B.5.3)では、ツリーTのノードXの深さは、TのルートノードからXへの単純なパスの長さ(エッジの数)として定義されます。ノードYの高さはYからリーフへの下向きの単純なパス上のエッジの数 ツリーの高さは、ルートノードの高さとして定義されます。

単純なパスは、頂点が繰り返されないパスであることに注意してください。

高さの木はの最大深さに等しいツリー。ノードの深さとノードの高さは必ずしも同じではありません。Cormenらの第3版の図B.6を参照してください。これらの概念の説明については、

エッジではなくノード(頂点)を数えるように要求する問題が発生することがあります。そのため、試験または就職の面接中にノードまたはエッジを数える必要があるかどうか不明な場合は、説明を求めてください。


ノードとエッジのカウントに違いはありますか?どちらも同じ結果になるようです。私が間違っているなら私を訂正してください。
VINOTH ENERGETIC

@jdhaoルートの深さを2にするにはどうすればよいですか?0(エッジを考慮する場合)または1(ノードを考慮する場合)です。
neowulf33

@ neowulf33、はい、私はひどく間違っています。ルートノードの深さは0にする必要があります。人を混乱させないように、コメントを削除します。
jdhao 2018年

2

簡単な答え:
深さ:
1. ツリーツリーのルートノードからリーフノードまでのエッジ/アークの数は、ツリーの深さと呼ばれます。
2. ノード:ルートノードからそのノードまでのエッジ/アークの数は、そのノードの深度と呼ばれます。


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までのパスの長さです。ツリーの高さは、ツリーの最も深いノードの深さよりも1つ大きくなります。深さdのすべてのノードは、ツリーのレベルdにあります。ルートはレベル0の唯一のノードであり、その深さは0です。

図7.2.1

図7.2.1:二分木。ノードAがルートです。ノードBとCはAの子です。ノードBとDは一緒にサブツリーを形成します。ノードBには2つの子があります。左の子は空のツリーで、右の子は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は内部ノードです。私の深さは3です。この木の高さは4です。


価値があるため、このリンクの定義は次のように変更されました。「ツリー内のノードMの深さは、ツリーのルートからMまでのパスの長さです。ツリーの高さは、ツリーの最も深いノード。」
kaya3
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.