二進木
コンセプト
ツリー内の要素は、ノードと呼ばれる
ノードとの間の関係の親子関係と呼ばれる隣接するワイヤ
ノード
- ノードは、ノードBの親ノードであり、Bノードは、ノードAの子ノードであります
- 親がCをノードDは、同じノードの単一ノードであるので、それらは、クロスと呼ばれる兄弟
- 親を持たないノードが呼び出されたルートノード
- ノードが子を持たないと呼ばれる葉ノードまたはリーフノード
ツリー
- 高ノード:最長パス(辺の数)のリーフノードにノード
- 深さノード:このノードにルートノードは、エッジの数が経験します
- フロアの数は、ノード:ノードの深さを+1
- 木の高さ:ルート・ノードの高さ
高さ:葉ノードの高さから最大計測0である
深さ:上から下に測定し、ルートノード0の深さ
の層:深さなど、カウントの開始は1であります
二進木
バイナリ番号2は、リーフノードは、各ノードは、左側の2つのつの子ノードを有し、右、これは、バイナリと呼ばれ、リーフノードを除いて、下にある完全二分木
バイナリツリーにおける符号3、リーフノードは、底部層で、左の葉ノードに対する最後の層が配置され、そして最後の層に加えて、他の層は、ノードの数が最大となる有し、バイナリツリーが呼び出され、完全二分木。
メモリ
チェーン記憶方法
の各ノードの3つのフィールド、データ記憶装置、他の二つの右と左の子ノードへのポインタを有しています。
順次記憶方法
シーケンシャルストレージアレイ方式に基づいは、ルートノードは、インデックス位置に格納されている私は、左ノードiが右の子ノードが位置1 = 2 iが3 = *に格納され、2 = *インデックス位置2に記憶され、1 =その
バイナリツリーはメモリを節約する方法と、ほとんどのストレージアレイである完全二分木である場合、
バイナリツリートラバーサル
次の三つの方法横切る前順走査、順トラバーサル中と後順
シーケンス内のノードは、その左側及び印刷を横断するノードの右サブツリーを表し、中および後に、前に。
- その後、ツリー内の任意のノード、このノードの最初の印刷、および印刷することがサブツリーを左に、そして最終的にその右のサブツリーを印刷する、という先行順走査手段
- トラバーサル順序は、ツリー内の任意のノードのために、最初にその左部分木を印刷して、独自のを印刷し、そして最後にその右のサブツリーを印刷し意味
- ツリー内の任意のノードのために、最初にその左部分木を印刷して、それを右のサブツリーを印刷し、そして最終的にはノード自体を印刷し、後順の手段。
後順の前に再帰的なプロセスです。
前順走査は、実際には、ルートノードを印刷する最初で、その後、再帰的に左のサブツリーを印刷し、右のサブツリーが再帰的に左後方印刷
キー漸化式を使用すると、サブ問題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)であります