バイナリツリーデータ構造(II)二分探索木

データ構造(XI)

私は自分自身を見つけるようにすることを、学習経験とプロセスにおけるデータ構造とアルゴリズムの知識を仕上げ、そして私はあなたが誰と共有することができると思います。

- 二分探索木 -

1.タイトル説明

ダイナミックなルックアップテーブルのバイナリ検索ツリーが特に有効であるには、ランダムシーケンスは、バイナリ検索ツリーを構築することにより、シーケンスに注文することができる、ツリーがランダム発注プロセスの配列を構築するプロセスです。新しいノードが挿入されるたびには、バイナリ検索ツリーの新しいリーフノードであり、挿入操作は、他のノードを移動させることなく行われる、すなわち、非空の空から唯一つのノードポインタ変更ことができます。
ここでは、探求し、バイナリ出力のシーケンスを確立したいです。

1.1入力

唯一の行は、複数桁の数字を含む、スペースで区切られました。(数字は重なっていてもよいです)

1.2出力

プリアンブルの確立の結果として出力ラインは、デジタル入力のバイナリ検索ツリーを移動しました。

1.3サンプルの入力と出力

サンプル入力
41467334500169 724,478,358,962,464 705,145,281,827,961 491,995,942,827,436
サンプル出力
41467334169145 281,358,464,436,500 478 491 724 705 962,827,961,942,995

2.コードの実装

C

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
    int date;
    struct node *left;
    struct node *right;
}node;
//建立树
node *insert(node *root,int x)
{
    //第一个节点,初始化
    if(root==NULL)
    {
        root=(node*)malloc(sizeof(node));
        root->date=x;
        root->left=NULL;
        root->right=NULL;
        return root;
    }
    if(x==root->date)
        return root;
    if(x<root->date)
    {
        root->left=insert(root->left,x);
    }
    else
    {
        root->right=insert(root->right,x);
    }
    return root;
}
//前序遍历
void pre(node *root)
{
    if(root==NULL)
        return;
    printf("%d ",root->date);
    pre(root->left);
    pre(root->right);
}
int main ()
{
    int num[1000]={0};
    node *root=NULL;
    for(int g=0;g<100;g++)
    {
        scanf("%d",&num[g]);
        if(num[g]==0)
            break;
        root=insert(root,num[g]);
    }
    pre(root);

    return 0;
}

3.コード説明

この質問を検索するバイナリ検索ツリーの定義に従った順序トラバーサルの前に順番に成果、注意を払うことができ、知識の木を調べることです。
三トラバーサルルールをクリックし導入鑑賞。

バイナリ検索ツリー

  • その左部分木が空でない場合、その後、すべてのノードは、左部分木の値です以下根の値。
  • その右のサブツリーが空でない場合は、右部分木のノードの値が全てですより大きい根の値。
  • その左と右のサブツリーもバイナリ・ソートツリーです。

バイナリ検索ツリー関連のアルゴリズム

  • (プロセス内のバイナリツリーで見つけるのX B)探している相手:

    • bは空の木である場合、検索が失敗した場合、または:
    • xはデータのルート・ドメインの値bと等しい場合、検索は成功し、そうでない場合:
    • データフィールドは、左サブツリー検索、少ないルートノードxの値b未満である場合に、そうでない場合:
    • 右のサブツリーを検索します。
  • インサート(バイナリツリーノードの手順に挿入B):

    • bが空の場合ツリーノードは、他のルートインサートと呼ぶことにします。
    • S->データ値Bがデータ・フィールドのルートノードに等しい場合、そうでない場合、返されます。
    • S->データ値Bがルートノードのデータフィールドよりも小さい場合、ノードは、Sが左サブツリーに挿入置くによって別段の指摘しました:
    • ノードは、右サブツリーに挿入sが指します。
公開された36元の記事 ウォン称賛10 ビュー5939

おすすめ

転載: blog.csdn.net/qq_44867435/article/details/104377264