これは、アルゴリズム理論からの単純な質問です。
違いは、ある場合にはノードの数をカウントし、ルートと具象ノード間の最短パス上の他の数のエッジをカウントすることです。
これはどれですか?
深さと高さはnodeのプロパティであることを学びました:
ノードの深さは、ノードからツリーのルートノードまでのエッジの数です。
ルートノードの深さは0です。
ノードの高さは、ノードからリーフへの最長パスのエッジの数です。
リーフノードの高さは0です。
treeのプロパティ:
ツリーのheightは、ルートノードの高さです。
または同等に、その最も深いノードの深さ。
ツリーのdiameter(またはwidth)は、最長パス上のnodesの数です任意の2つのリーフノード間。下のツリーの直径は6ノードです。
木の高さと深さが等しい...
しかし、ノードの高さと深さは等しくありません...
高さは、指定されたノードから可能な限り深いリーフまで移動することによって計算されます。
深さは、ルートから指定されたノードまでのトラバーサルから計算されます。
Cormenらによるとアルゴリズムの概要(付録B.5.3)、ツリーTのノードXの深さは、TのルートノードからXまでの単純なパスの長さ(エッジの数)として定義されます。ノードYの高さは最長 Yから葉への下向きの単純なパス上のエッジの数。ツリーの高さは、ルートノードの高さとして定義されます。
単純なパスは、頂点が繰り返されていないパスであることに注意してください。
treeの高さは、atreeの最大深度に等しい。ノードの深さとノードの高さは必ずしも等しくありません。 Cormenらの第3版の図B.6を参照してください。これらの概念を説明しています。
エッジの代わりにノード(頂点)をカウントするように要求する問題が時々見られるので、試験や就職の面接でノードやエッジをカウントする必要があるかどうかわからない場合は、明確化を求めてください。
簡単な答え:
深さ:
1。 ツリー:エッジの数/アークツリーのルートノードからリーフノードまでは、ツリーの深さと呼ばれます。
2。 ノード:エッジ/アークの数ルートノードからそのノードまでは、そのノードの深さと呼ばれます。
私はこの記事を書きたかったのは、私が学部生のCS学生であり、OpenDSAや他のオープンソースの教科書をますます使用しているからです。高さと深さの教え方が世代ごとに変化しているという最高の回答のように思えますが、私はこれを投稿していますので、誰もがこの矛盾が存在し、うまくいけばバグを引き起こさないことを認識していますプログラム!ありがとう。
OpenDSA Data Structures&Algos book から:
Nの場合1、n2、...、nk nのようなツリー内のノードのシーケンスです私 nの親です私1 <= i <kに対して+1、このシーケンスはnからのパスと呼ばれます1 nにk。パスの長さはk-1です。ノードRからノードMへのパスがある場合、RはMの祖先であり、MはRの子孫です。したがって、ツリー内のすべてのノードはツリーのルートの子孫であり、ルートは祖先ですすべてのノードの。 ツリー内のノードMの深さは、ツリーのルートからMまでのパスの長さです。ツリーの高さは、ツリー内の最も深いノードの深さよりも1大きいtree。深さdのすべてのノードは、ツリーのレベルdにあります。ルートはレベル0の唯一のノードであり、その深さは0です。
図7.2.1:バイナリツリー。 Node Aはルートです。ノードBとCはAの子です。ノードBとDは一緒にサブツリーを形成します。 Node 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は内部ノードです。 Iの深さは3です。このツリーの高さは4です。
これらの概念を理解する別の方法は、次のとおりです。そのため、ルートの深さは0であり、そのすべての子は下方に成長するため、ノードの各レベルは現在の深さ+ 1になります。
高さ:同じ水平線ですが、今回は地上位置が外部ノードであり、これはツリーの葉であり、上向きにカウントされます。