1. 概要

このチュートリアルでは、二分木の高さを見つける方法を学び、例を見ていきます。

2. 意味

まず、二分木の高さを定義することから始めましょう。

二分木のノードの高さは、リーフノードからターゲットノードへのパスのエッジの最大数です。ターゲットノードに他のノードが接続されていない場合、高さそのノードのはになります。 二分木の高さは、二分木のルートノードの高さです。 言い換えると、二分木の高さは、ルートから最も遠い葉のノードまでのエッジの最大数に等しくなります。

二分木の同様の概念は、木の深さです。 二分木のノードの深さは、ルートノードからターゲットノードまでのエッジの総数です。同様に、二分木の深さは、ルートノードからターゲットノードまでのエッジの総数です。最も遠い葉ノード。

ここで重要な観察の1つは、二分木の全体の深さを計算すると、二分木の高さに相当するということです。

3. 例

二分木を見てみましょう:

まず、ノードの高さを計算します。 したがって、定義によれば、ノードの高さは、リーフノードからノードへのパス内のエッジの最大数です。 ノードには2つのパスがあることがわかります:、、。 これら2つのパスの中で最大のエッジ数は次のようになります。 したがって、ノードの高さはです。

次に、二分木の高さを計算します。 ルートから、リーフノードにつながる3つの異なるパスを持つことができます:、、、。 これらの3つのパスの中で、パスには最大数のエッジが含まれています。 したがって、木の高さはです。

次に、ノードの深さを求めます。 ルートから、ノードへのパスは1つだけであり、エッジが1つあることがわかります。 したがって、ノードの深さはです。

前に述べたように、二分木の深さは木の高さと同じです。 したがって、二分木の深さはです。

4. アルゴリズム

前のセクションでは、二分木の高さを定義しました。 次に、アルゴリズムを調べて、二分木の高さを見つけます。

ルートノードを入力としてアルゴリズムを開始します。 次に、ルートの左右の子ノードの高さを計算します。 ルートに子ノードがない場合は、ツリーの高さをとして返します。

次に、ルートノードの左右のサブツリーからすべてのノードを再帰的に呼び出しして、バイナリツリーの高さを計算します。 最後に、左右のサブツリーの高さを計算したら、両方の中で最大の高さを取得し、それに1つ追加します。 アルゴリズムによって返される数値は、二分木の高さになります。

5. 時間計算量分析

最良のシナリオとして、バイナリツリーにはノードが1つだけあります。 このような場合、ルートが null、の場合にのみアルゴリズムの最初の条件を実行し、ツリーの高さをとして返します。 ここで、時間計算量はになります。

一般に、ツリー内の各ノードの高さを計算します。 すべてのノードを再帰的に呼び出し、ルートノードから左右のサブツリーの高さを計算し、最後にバイナリツリー全体の高さを返します。 したがって、ツリー内のすべてのノードにアクセスします。

二分木のノード数が。であると仮定しましょう。 したがって、時間計算量はになります。

6. 結論

この記事では、二分木の高さを計算する方法について説明しました。 再帰的アルゴリズムと、アルゴリズムに必要な時間計算量の分析を示しました。