私は「木」です

私は「木」です

上の「ホリス」をクリックしてフォローすると、エキサイティングなコンテンツがすぐに表示されます。

全文:1800
読み取り時間:3分
私は木です。データ構造ファミリーの子供-「スタック」はすでにあなたを私たちのファミリーに紹介しています(私は「スタック」です)。私がZhanを子供の頃と呼ぶ理由は、私の父と私、つまり配列が同じ世代だからです。

私たちのような家族が存在する主な理由は、彼らの家族は非常に強いですが、彼らには一定の制限があるからです。配列であれ、リンクされたリストであれ、小さな人形(スタック、キュー)であれ、保存されたデータ間には単純な事前注文関係しかないことは誰もが知っています。

これについて話しているので、データ構造のファミリー全体を示しましょう。結局のところ、あなたが知っている「スタック」はジュニアに過ぎず、私たちの家族の歴史についてはあまり知りません。

データ構造ファミリー


データ構造には2つの主な機能があります。1つはデータを保存すること、もう1つは保存されたデータ間の論理関係を反映することです。論理関係は、コンピューター内のストレージの物理的な場所ではないことに注意してください。したがって、保存するデータの論理構造に応じて、次の主要なブランチに分割できます。

  • コレクション
    他の人の家に保存されているデータ間の関係は何ですか。同じコレクション内で可能な関係は同じです。
    私は「木」です

  • 線形構造の
    彼らの家では、他の人のために保存されたデータは順序付けられ、データは論理的にエンドツーエンドで保存されます。したがって、要素間には1対1の関係があります。たとえば、ご存知のアレイファミリは線形構造です。
    私は「木」です

  • ツリー
    ねえ、これは問題の私たちの家族の枝です、私たちのストレージと多くの関係の要素があります。

グラフ構造
パターンは、複雑なデータ構造の分岐構造です。データ要素間の関係は任意です。任意の2つのデータ要素を関連付けることができます。
私は「木」です

誰もが知っている配列、キュー、スタック、およびリンクされたリストはすべて、線形構造のブランチに属しています。今日の主人公、つまり私と私の「ツリー」ファミリーは、ツリー構造の大きな枝にいます。

ご想像のとおり、私はデータ構造ファミリー全体のツリー構造の家長です。大規模なファミリーブランチとして、私たちは確かにデータ構造ファミリー全体の基本的な機能、つまりデータストレージを持っています。さらに、ツリーブランチ全体は、主にツリー構造のデータコレクションを格納するために使用されます。率直に言って、他の人のために保存するデータは階層的です。それは本質的に逆さまの木のようなものです。

まず、データを保存するためのいくつかの制限と要件について説明します。他の要素のために保存する各要素はノードと呼ばれ、通常はルートノードと呼ばれる特定のノードがあり、残りは非ルートノードと呼ばれます。標準ツリーを示してから、この図を使用してリーフノードと親ノードの概念を紹介します。
私は「木」です

H节点是O和L的父节点,O和L是H节点的子节点。
H节点是根节点,因为他没有父节点。 
I、S和L节点是叶结点,因为他们没有子节点。 
I和S是兄弟节点,因为他们的父节点都是O节点。

さて、それがすべてです、それはあなたに私の家族を紹介する時です。データ構造のツリーファミリーの大家族として、私には多くの子孫がいます。最初に私の家族の木をお見せしましょう:
私は「木」です

私には2人の息子がいます:秩序ある木と無秩序な木です。長男は家族の柱であり、多くの家族の仕事を引き受けてきました。そして、私の末っ子は比較的自由な子供で、何も気にしないので、人々は彼を自由な木と呼ぶことがあります。

私がとても愛しているこの幼い息子、ディスオーダーツリーについて話させてください。

順序付けられていないツリー


順序付けられていないツリーであり、ツリー構造でもあります。ツリー内の親ノードと子ノードの関係を除いて、同じ親ノードのすべての子ノードには関係がありません。ツリーでは、この関係は、誰が誰であるかなどの順序です。誰が後ろにいますか?したがって、それは無秩序な木と呼ばれます。また、私の幼い息子は自由すぎるので、まだ私のために赤ちゃんを出産していません。したがって、私の末っ子は孤独な男です。

彼のデータストレージについて詳しく説明しましょう。前述のように、彼が保存するデータは、親ノードと子ノードにのみ関連しています。A、B、Cの3つのデータを保存するように依頼すると、1つの親ノードと2つの子ノードの3つのケースがあります。
私は「木」です

2つの子ノード間の位置関係に関係なく、それらはすべて同じツリーです。つまり、ABCとACBは同じツリーと見なされます。

注文した木


私の長男、後継者を木の家族全員に紹介しましょう。彼は本当に長男がすべきことをすべてやった。彼と彼の子供たちは木の家族のほとんどすべての仕事を引き受けた。

それと順序付けされていないツリーとの違いはより明白です。つまり、順序付けられた番号では、子ノード間に順序関係があります。私の長男にA、B、Cの3つのデータの保存を手伝ってもらうと、1つの親ノードと2つの子ノードの6つのケースがあります。
私は「木」です

2つのノードの順序が変更されている限り、それは新しいツリーです。ABCとACBは2つの異なるツリーと見なされます。

上の家族地図から、私の長男にもたくさんの子供がいることがわかります。その中で、私の3人の有名な孫は、Binary Tree、Hoffman Tree、およびBTreeです。

今日の若者は非常に個人的であり、他の人のためにデータを保存する際には多くの要件がありますが、幸いなことに、若者には少し個性が必要です。それぞれの特性のおかげで、ツリーファミリーは非常に強力になります。

若い世代の秩序ある木の導入については、後で自分でやらせてください。古い骨についてたくさん話して疲れました。

-もっと|もっとエキサイティングな記事-

  • 私は「スタック」です
  • 神になるためのJavaエンジニアの道(2018年改訂)
  • 言語、Docker、新しいテクノロジーを活用する
  • 分散ロックの複数の実装

    あなたがこれを見れば、あなたはこの記事が好きです。

    次に、QRコードを押し続けてホリスをフォローしてください

    私は「木」です

おすすめ

転載: blog.51cto.com/13626762/2545023