クラスノート:二分木の論理構造

バイナリツリーは、n(n≥0)ノードの有限セットです。このセットは、空のセット(空のバイナリツリーと呼ばれます)、またはルートノードと2つの互いに素なツリーであり、それぞれルートノードの左側と呼ばれます。正しいサブツリーのサブツリーとバイナリツリーが構成されます。
バイナリツリーの特性
1.各ノードには最大で2つのサブツリーがあります;
2.バイナリツリーは順序付けされており、その順序を任意に逆にすることはできません。
:バイナリツリーとツリーは、2種類のツリー構造です。バイナリツリー
の基本形式:空のバイナリツリー、1つのルートノードのみ、ルートノードには右のサブツリーのみ、ルートノードには左のサブツリーのみ、ルートノードには左と右の両方のサブツリーがあります。
特別な二分木
1. 斜め木
(1)すべてのノードに左サブツリーしかない二分木は左斜め木と呼ばれる;
(2)すべてのノードに右サブツリーしかない二分木は右斜め木と呼ばれる;
(3)左斜め木と右斜め木を合わせて斜め木と呼びます。
斜めツリーの特徴
(1)斜めツリーでは、各レベルに1つのノードしかない;
(2)斜めツリーの数はその深さと同じです。
2. 完全二分木
二分木では、すべてのブランチノードに左と右のサブツリーがあり、すべての葉が同じレベルにある場合。
完全なバイナリツリーの特性
(1)葉は最下層にのみ表示できます;
(2)次数0および次数2のノードのみが使用できます。
完全な二分木には、同じ深さの二分木内のほとんどのノードがあります。
完全な二分木は、同じ深さの二分木で最大数の葉ノードを持ちます。
3. 完全な二分木
n個のノードを持つバイナリツリーには、階層順に番号が付けられます。番号i(1≤i≤n)のノードが、バイナリツリーの同じ深さの完全なバイナリツリーの番号iのノードと同じである場合。
完全なバイナリツリーでは、最後のノードから始まり、任意の数のノードを連続して削除すると、完全なバイナリツリーになります。
完全なバイナリツリーの特性
(1)リーフノードは下の2つのレイヤーにのみ表示でき、下のレイヤーのリーフノードはバイナリツリーの左側に集中します;
(2)完全なバイナリツリーに次数1のノードがある場合のみ、 1つある場合があり、ノードには左の子しかありません。
(3)深さkの完全な二分木は、k-1層の完全な二分木でなければなりません。バイナリツリーの
基本的なプロパティ
プロパティ5-1バイナリツリーは、i番目のレイヤーに最大2i-1ノード(i≥1)を持ちます。
プロパティ5-2深さkの二分木は、最大2k-1個のノードと少なくともk個のノードを持っています。
:深さがkおよび2k-1ノードのバイナリツリーは完全なバイナリツリーである必要があり、深さがkおよびkノードのバイナリツリーは必ずしも傾斜ツリーである必要はありません。
プロパティ5-3バイナリツリーで、リーフノードの数がn0で、次数2のノードの数がn2の場合、n0 = n2 + 1です。
n個のノードを持つ完全なバイナリツリーでは、n0 =(n + 1)/ 2個のリーフノードがあります。完全なバイナリツリーの
基本的なプロパティ
プロパティ5-4 n個のノードを持つ完全なバイナリツリーの深さは、log2n(切り捨て)+1です。
プロパティ5-5。n個のノードを持つ完全なバイナリツリーの場合、番号付けは1から始まり、シーケンス番号i(1≤i≤n)(省略してノードiと呼ばれる)のノードには次のようになります。 :
(1)i> 1の場合、ノードiの親ノードのシリアル番号はi / 2です; i = 1の場合、ノードiはルートノードであり、親ノードはありません。
(2)2i≤nの場合、ノードiの左の子のシリアル番号は2iで、2i> nの場合、ノードiには左の子がありません。
(3)2i +1≤nの場合、ノードiの右側の子のシリアル番号は2i + 1であり、2i + 1> nの場合、ノードiには右側の子がありません。
n個のノードを持つ完全なバイナリツリーの場合、番号付けは1から始まり、ノードiの親ノードはi / 2です。ノードiの左の子は2iで、ノードiの右の子は2i + 1です。 。
プロパティ5は、完全なバイナリツリーで、ノードのシーケンス番号がノード間の論理関係を反映していることを示しています。
バイナリツリートラバーサル操作
バイナリツリートラバーサルとは、ルートノードから開始し、特定の順序でバイナリツリー内のすべてのノードにアクセスすることです。これにより、各ノードは1回だけアクセスされます。
バイナリツリートラバーサル演算の目的:非線形構造の線形化。
1. プレオーダー(ルート)トラバーサル
バイナリツリーが空の場合、null演算が返されます。それ以外の場合は、
①ルートノードにアクセスし、
ルートノードの左サブツリーを
プレオーダールートノードの右側サブツリーをプレオーダーでトラバースします。
2. 中間順序(ルート)トラバーサル
バイナリツリーが空の場合、null演算が返されます。それ以外の場合:
①中間順序は
ルートノードの左サブツリーをトラバースします
。②中間順序はルートノードの右サブツリーをトラバースします。
3. ポストオーダー(ルート)トラバーサル
バイナリツリーが空の場合、null演算が返されます。それ以外の場合:
①ポストオーダーはルートノードの左側のサブツリーを
トラバースします。②ポストオーダーはルートノードの右側のサブツリーをトラバースします。
③ルートノードにアクセスします。
図4に示すように、横断シーケンス
バイナリツリー階層トラバーサルは、第一の層(すなわち、ルート)から出発して、バイナリツリーを参照し、層によって上から下の層にトラバース、同一層に、プレスは、ノードのいずれかで左から右へご覧ください。
二分木の事前順序と中間順序がわかっている場合、二分木は一意に決定できます。

公開された48件の元の記事 いいね25 2453にアクセス

おすすめ

転載: blog.csdn.net/qq_43628959/article/details/103018854