記事のディレクトリ
A.バイナリツリー
1.バイナリツリーの定義
以下の条件は、二分木構造と呼ば満たされています。
1.ノードの各々は2以下です。
子ノードは、任意のノードあたり2の順序を逆にすることができません。
2.バイナリ木の性質
1つのプロパティ:バイナリツリー、2 ^(K-1)(k≥1)ノードまでにk番目の層。
プロパティ2:バイナリツリーの深さmが最も2M-1(M≧1)ノードに有します。
自然3:それはノードN0の端末番号であればいずれのバイナリツリーで、次数2のノードの数がN0 = N2 + 1、N 2です。
プロパティ4:バイナリツリーは、ノードおよび[]は整数部log2nのlog2nが取られる意味少なくとも[log2n] +1、深さNを有しています。
自然5:すべてのノードへの完全なバイナリツリーのn個のノードが上から下および左に1から始まるシーケンス番号の正しい順序であろうがある場合、そのノードの任意の数の私があります。
I = 1のように①、私は> 1として二分木のルートノードなし親、ノードI、I / 2の親ノードのシリアル番号です。
②2iが> N、次に数には左の子ノードI、例えば2I≤nが、iは2Iであるノードの子ノードのシリアル番号の左側にない場合。
③2I + 1> N、ノードの数がIない右の子、そのような2I + 1≤nは、その後数iが2I + 1でノードの右の子ノードのシリアル番号です。
3.バイナリストレージ構造
バイナリツリー構造は、各ノードは2つの後継まで持つことができ、非直線的です。順次ストレージ構造とチェーンのストレージ構造に分かれて格納するバイナリツリー構造。
1)。シーケンシャルストレージ構造
下に示すように順次記憶構造は、一次元アレイを用いて実施することができます。
バイナリツリーは完全2分木であるとき、わかるように、このストレージ構成は非常に便利ですが、スペースが無駄にされていないが、バイナリツリーの平均のために保存されている完全なバイナリツリーに作成する「仮想ノード」、でなければなりません:以下のように、スペースの無駄が生じ
そのため、注文が完了し、バイナリツリーに適用一般的に保存されている、それは以下のように、あなたは、チェーンストアを使用することができ、バイナリツリーのストレージニーズを満たすために保存することができないため。
2)。ストレージ構造
[lchindデータrchild]:任意のバイナリツリーの各ノードは、(ルートを除く)唯一の親ノード、二人の子供までを有し、それは図1に示す構造に設計することができます。バイナリツリーはまた、バイナリリストと呼ばれています。
3)。ジャンクションコードの実装
バイナリコードは、以下のことを実現するために、リストノード構造をリンク:
typedef struct Node
{
DataType data;
struct Node * LChild;
struct Node * RChild;
}BiTNode,*BiTree;
II。バイナリツリートラバーサル(フォーカス)
1.エルゴード理論コース
左のサブツリーはトラバーサル、根、LDR、トラバーサル順序は、次の6種類の右部分木を表している場合:
①ルートへのアクセスは、左のサブツリーを横断し、右のサブツリーをトラバース。DRLと呼ば
②ルートへのアクセスを、トラバースは、右のサブツリーを横断し、サブツリーを残しました。DLRで表さ
③右のサブツリーを横断し、左の部分木、rootアクセスをトラバース。LDRと呼ば
④左のサブツリーを横断し、右部分木、rootアクセスをトラバース。RDLと呼ば
⑤右のサブツリー、rootアクセスを横断し、左のサブツリーをトラバース。LRDによって示されます
⑥トラバースは、右のサブツリーのトラバースは、ルートアクセスをサブツリーを残しました。RLDとして記録
注文が最初に左と右のトラバーサルで指定された場合は、3つだけ残っている:DLR、LDR、LRD。
次に、ルートのアクセス順序に応じて、それぞれ、LDRの順序トラバーサルに、LRDは、後順トラバースフロントDLR順トラバーサルであることを特徴とします。
:上述したバイナリツリーの
先行順トラバース配列:ABDECFG
プレオーダー配列:DBEAFCG
後順配列:DEBFGCA
これを書いて、私はそれがより便利孟新しい理解になると思います。
プレオーダートラバーサル配列:(A)(B(DE ))(C(FG))
INORDERトラバーサル順序:((D)B(E ))(A)((F)C(G))
後順トラバーサル順序:((DE)B)(( FG)C)(A)
先将大头写下来然后进行填写,类似于填空,但是仅限于帮助你理解遍历顺序,而不是让你使用这个方法记忆遍历顺序,我们应该通过辅助工具来帮助我们真正了解。
ここで再び手と思想:
書くために試してみて、それが答えとして、あなたが学んだことを示しているかのように、以下では、同じではありません!
予約限定トラバーサル:ABDFGCEH
行きがけ:BFDGACEH
後順トラバーサル:FGDBHECA
次のコードは、種々のトラバーサルを実装するために使用されます。
2.先行順走査
void PreOrder(BiTree root)
{ // root为指向二叉树或某一树的根结点
if(root!=NULL)
{
Visit(root->data); // 访问根结点,显示数据结点
PreOrder(root->LChild);// 遍历左子树
PreOrder(root->RChild);// 遍历右子树
}
}
3.予約限定!
void PreOrder(BiTree root)
{
if(root!=NULL)
{
PreOrder(root->LChild);
Visit(root->data)
PreOrder(root->RChild);
}
}
4.後順
void PreOrder(BiTree root)
{
if(root!=NULL)
{
PreOrder(root->LChild);
PreOrder(root->RChild);
Visit(root->data);
}
}
知識の理論は非常にバイナリツリートラバーサルのために複雑な、しかし、バイナリツリーによる構造の再帰的な定義であるが、最初の注文は、順番に、後に、それが再帰的に定義されています。したがって、再帰的なバイナリツリートラバーサルモード符号量小さいです。
間違っている場合は、正しい私の批判を喜ば、コメントを歓迎します。
それぞれのテキスト文:誰もあなたの貧しい人々のために責任を負うことになります、あなたは拍手豊かな人がいます!だから、誰か他の人の口の中で生き、自分自身をしません!大胆に、あなたは夢を持って飛ぶ;道路があり、大胆に離れて行く前方道、人々停止を恐れていない、私は自分自身を恐れ降伏よ!