アルゴリズム(ツリー)
3827 ワード
バイナリツリー
バイナリツリーは非線形の資料構造である.バイナリ・ツリーは、データの閲覧速度を速めるために使用されます.
バイナリツリーが出現する以前の通常のツリーでは,サブツリーの数を制限しないため,データの統一管理が困難であった.また、必要なデータを検索するプロセスは煩雑で非効率です.したがって,Izenツリーが出現してから,ほとんどのツリーがIjinツリーとして表現されている.
バイナリツリーは、すべてのノードに2つのサブツリーがあるツリーです.
ルートと左サブツリー、右サブツリーからなるノードの集合、およびzenツリーのサブツリーは、バイナリツリーでなければなりません.
ほうわバイナリ
ツリーの各レベルにノードのバイナリツリーがあります.
完全バイナリツリー
完全バイナリツリーとは、ツリーの高さがhの場合、1レベルからh−1レベルまでのすべてのノードが充填され、最後のレベルhでノードが順番に充填されるツリーである.つまり上から順番に木を埋めていく形です.
その他のバイナリツリー
飽和バイナリツリー、完全バイナリツリーを除き、すべてのバイナリツリーを他のバイナリツリーと呼ぶ.
バイナリツリーの性質
ノードの個数がnであれば、幹線の個数はn−1である.(ルートノードの親がいないので.)
高さがnの場合、n~2ⁿ−1個のノードがある.
バイナリツリーの配列表現
配列を作成するときは、バイナリツリーのプロパティを考慮すると、ツリーの空白部分はいつでも値を持つことができるので、配列にも空に割り当てます.
ノードiの親ノードインデックス=i/2=>//は、1つのノードが共有されている場合、残りのノードを捨てる必要があるためです.
ノードiの左サブノードインデックス=2 i
ノードiの右サブノードインデックス=2 i+1
バイナリツリーの演算
ぐるりと回る
ツリー内のすべてのノードを巡回
線形サブ構造の順序は簡単です=>順番にアクセスするだけです
ツリーには様々な方法ex)(BFS、DFS)
前列巡回VLR(ルート->左->右)=DFS
def preorder(n):
if n is not None:
print(n.data, end='') // 루트노드 처리
preorder(n.left) // 왼쪽 서브트리 처리
preorder(n.right) // 오른쪽 서브트리 처리
中尉巡回LVR(左->根->右)
def inorder(n):
if n is not None:
inorder(n.left) // 왼쪽 서브트리 처리
print(n.data, end='') // 루트노드 처리
inorder(n.right) // 오른쪽 서브트리 처리
後方巡回LV(左->右->根)
def postorder(n):
if n is not None:
postorder(n.left) // 왼쪽 서브트리 처리
postorder(n.right) // 오른쪽 서브트리 처리
print(n.data, end='') // 루트노드 처리
レベルポーリング(ノードのポーリング方法をレベル別にチェック)
キューを使用して実装します.
ループを使用しません.
操作順序の計算に使用可能(操作の優先度)
def levelorder(root):
queue = CircularQueue() //큐 객체 초기화
queue.enqueue(root) // 최초의 큐에는 루트 노드만 들어있음
while not queue.isEmpty(): // 큐가 공백이 아닌 동안
n = queue.dequeue //큐에서 맨 앞의 노드 n을 꺼냄
if n is not None:
print(n.data, end='') //먼저 노드의 정보를 출력
queue.enqueue(n.left) // n의 왼쪽 자식 노드를 큐에 삽입
queue.enqueue(n.right) // n의 오른쪽 자식 노드를 큐에 삽입
ヒップホップ
hipは完全バイナリツリーに基づいたデータ構造であり,最大(最小)値を迅速に見つけるために構築されたデータ構造である.
最大HIP:親ノードのキー値が子ノードのキー値以上の完全バイナリツリー
最小HIP:親ノードのキー値が子ノードのキー値以下の完全バイナリツリー
hipでの演算hipでの演算:挿入演算[hipでのえんざん:そうにゅうえんざん]
新しい値を一番下のノードに挿入し、->親ノードのサイズと比較します.大きい場合は、親ノードと値の交換->親ノードを繰り返し、親ノードより小さくなるまで
臀部を削除
最後のノードの値を削除した位置に挿入->次のサブノードの値より大きいノードの値と比較して小さい場合は、サブノードの値がexchange->より大きいまでノードの値を繰り返します
臀部の実現:平らな構造
hipは完全バイナリツリーで、バイナリツリーの配列表現と同じです
Reference
この問題について(アルゴリズム(ツリー)), 我々は、より多くの情報をここで見つけました https://velog.io/@hyundong_kk/알고리즘트리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol