ウィキペディアによると、
ツリーの高さは、ルートからツリーの最も深いノードまでのパスの長さです。ノード(ルート)が1つしかない(ルート化された)ツリーの高さは0(または1)です。
私はそれを取得しません-それはゼロまたは1(または両方)ですか?
これは、二分木の高さを再帰的に記述するための仮定にすぎません。高さが0または1のノードのみで構成されるツリーを検討できます。
あなたが本当にそれについてどういうわけか考えたいなら、あなたはそれを考えることができます
これは、最小のツリーの高さを説明するためのものです。いずれの場合も、降順ノードを追加するたびに、関連するエッジも追加して、それに応じて増加します。
ウィキペディアで提供されている例では:
このツリーの高さは4(ノード)または3(エッジ)です。エッジでカウントするのか、ノードでカウントするのかによって異なります。
エッジカウントではなくノードカウントを使用する利点の1つは、空のケース(0ノードおよびノードレベル)と最小ケース(1ノードおよびノードレベル1)を区別することです。空のツリーが意味をなさない場合もありますが、空の試行が完全に正当な場合もあります。
規則によって異なります。ここには「正しい」答えはありません。私はそれが1であると教えられました。しかし、ゼロは同じように正しいです。
私の意見では、1つのルートノードの高さは0である必要があります。2^ heightはそのレベルのノードの数も提供するため、実用的には理にかなっています。
ノードクラスで再帰的に高さを計算していると仮定すると、ルートの高さを含めずに高さを返すためにこれを行います(Javaコード)。
int height(){
int leftHeight = 0;
int rightHeight = 0;
if(left != null)
leftHeight =+ left.height() + 1;
if(right != null)
rightHeight =+ right.height() + 1;
return Math.max(leftHeight, rightHeight);
}
ルートの高さを含めたい場合は、次のようにします。
int height(){
int leftHeight = 0;
int rightHeight = 0;
if(left != null)
leftHeight =+ left.height();
if(right != null)
rightHeight =+ right.height();
return Math.max(leftHeight, rightHeight) + 1;
}
木の高さをどのように解釈するかによって異なります。一部のアプリケーションでは、ノードが1つあるツリーは、高さが1であると解釈され、他のアプリケーションでは、高さが0であると見なされます。