学習アルゴリズム:バイナリツリー

二進木

コンセプト

ツリー内の要素は、ノードと呼ばれる
ノードとの間の関係の親子関係と呼ばれる隣接するワイヤ
Image.png

ノード
  1. ノードは、ノードBの親ノードであり、Bノードは、ノードAの子ノードであります
  2. 親がCをノードDは、同じノードの単一ノードであるので、それらは、クロスと呼ばれる兄弟
  3. 親を持たないノードが呼び出されたルートノード
  4. ノードが子を持たないと呼ばれる葉ノードまたはリーフノード
ツリー
  1. 高ノード:最長パス(辺の数)のリーフノードにノード
  2. 深さノード:このノードにルートノードは、エッジの数が経験します
  3. フロアの数は、ノード:ノードの深さを+1
  4. 木の高さ:ルート・ノードの高さ

画像[2] .PNG

高さ:葉ノードの高さから最大計測0である
深さ:上から下に測定し、ルートノード0の深さ
の層:深さなど、カウントの開始は1であります

二進木

画像[3] .PNG

バイナリ番号2は、リーフノードは、各ノードは、左側の2つのつの子ノードを有し、右、これは、バイナリと呼ばれ、リーフノードを除いて、下にある完全二分木

バイナリツリーにおける符号3、リーフノードは、底部層で、左の葉ノードに対する最後の層が配置され、そして最後の層に加えて、他の層は、ノードの数が最大となる有し、バイナリツリーが呼び出され、完全二分木

メモリ
  • チェーン記憶方法
    の各ノードの3つのフィールド、データ記憶装置、他の二つの右と左の子ノードへのポインタを有しています。
    画像[4] .PNG

  • 順次記憶方法
    シーケンシャルストレージアレイ方式に基づいは、ルートノードは、インデックス位置に格納されている私は、左ノードiが右の子ノードが位置1 = 2 iが3 = *に格納され、2 = *インデックス位置2に記憶され、1 =その
    画像[5] .PNG
    バイナリツリーはメモリを節約する方法と、ほとんどのストレージアレイである完全二分木である場合、

バイナリツリートラバーサル

次の三つの方法横切る前順走査順トラバーサル中後順
シーケンス内のノードは、その左側及び印刷を横断するノードの右サブツリーを表し、中および後に、前に。

  • その後、ツリー内の任意のノード、このノードの最初の印刷、および印刷することがサブツリーを左に、そして最終的にその右のサブツリーを印刷する、という先行順走査手段
  • トラバーサル順序は、ツリー内の任意のノードのために、最初にその左部分木を印刷して、独自のを印刷し、そして最後にその右のサブツリーを印刷し意味
  • ツリー内の任意のノードのために、最初にその左部分木を印刷して、それを右のサブツリーを印刷し、そして最終的にはノード自体を印刷し、後順の手段。
    UTOOLS1576592045092.png

後順の前に再帰的なプロセスです。
前順走査は、実際には、ルートノードを印刷する最初で、その後、再帰的に左のサブツリーを印刷し、右のサブツリーが再帰的に左後方印刷
キー漸化式を使用すると、サブ問題Bを想定し、問題Aを解決したい場合は、Cが解決されたということです、使用して、B、Cの溶液Aを見てどのように、


//前序遍历的递推公式:
preOrder(r) = print r->preOrder(r->left)->preOrder(r->right);

//中序遍历的递推公式:
inOrder(r) = inOrder(r->left)->print r->inOrder(r->right);

//后序遍历的递推公式:
postOrder(r) = postOrder(r->left)->postOrder(r->right)->print r;

void preOrder(Node* root) {
  if (root == null) return;
  print root // 此处为伪代码,表示打印 root 节点
  preOrder(root->left);
  preOrder(root->right);
}

void inOrder(Node* root) {
  if (root == null) return;
  inOrder(root->left);
  print root // 此处为伪代码,表示打印 root 节点
  inOrder(root->right);
}

void postOrder(Node* root) {
  if (root == null) return;
  postOrder(root->left);
  postOrder(root->right);
  print root // 此处为伪代码,表示打印 root 节点
}

バイナリツリートラバーサル時間計算:
アップノードごとに2回アクセスされる、数nはノードの時間と複雑さに比例していることはO(N)であります

おすすめ

転載: www.cnblogs.com/jinlin/p/12073609.html