web-dev-qa-db-ja.com

ノードが1つしかない木の高さ

ウィキペディアによると、

ツリーの高さは、ルートからツリーの最も深いノードまでのパスの長さです。ノード(ルート)が1つしかない(ルート化された)ツリーの高さは0(または1)です。

私はそれを取得しません-それはゼロまたは1(または両方)ですか?

24
Snowman

これは、二分木の高さを再帰的に記述するための仮定にすぎません。高さが0または1のノードのみで構成されるツリーを検討できます。

あなたが本当にそれについてどういうわけか考えたいなら、あなたはそれを考えることができます

  • 高さをエッジカウントと見なす場合は0です(単一のノードにエッジがないため、0になります)
  • 高さをノード数と見なすと1になります(単一のノードが1として数えられるように)

これは、最小のツリーの高さを説明するためのものです。いずれの場合も、降順ノードを追加するたびに、関連するエッジも追加して、それに応じて増加します。

ウィキペディアで提供されている例では:

alt text

このツリーの高さは4(ノード)または3(エッジ)です。エッジでカウントするのか、ノードでカウントするのかによって異なります。

34
Jack

エッジカウントではなくノードカウントを使用する利点の1つは、空のケース(0ノードおよびノー​​ドレベル)と最小ケース(1ノードおよびノー​​ドレベル1)を区別することです。空のツリーが意味をなさない場合もありますが、空の試行が完全に正当な場合もあります。

12
supercat

規則によって異なります。ここには「正しい」答えはありません。私はそれが1であると教えられました。しかし、ゼロは同じように正しいです。

7
Oren A

私の意見では、1つのルートノードの高さは0である必要があります。2^ heightはそのレベルのノードの数も提供するため、実用的には理にかなっています。

3
Ritesh

ノードクラスで再帰的に高さを計算していると仮定すると、ルートの高さを含めずに高さを返すためにこれを行います(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
user4617883

木の高さをどのように解釈するかによって異なります。一部のアプリケーションでは、ノードが1つあるツリーは、高さが1であると解釈され、他のアプリケーションでは、高さが0であると見なされます。

0
zerodin