################################################## ######
"" " A는, 트리 1, 트리? 무슨 트리 n은 데이터 구조 (N> = 1) 계층 적 관계를 갖는 노드들의 유한 집합. 그것은 호출"트리 "때문에 그것은 루트입니다 상하 잎 말을하는 것입니다 거꾸로 트리처럼 보인다. 그것은 다음과 같은 기능을 가지고 있습니다 : 각 노드는 0 개 이상의 자식 노드를 가지고, 노드에 부모 노드가 루트라고하지 않습니다있다 노드가, 각각의 루트가 아닌 노드는 부모 노드를 갖고 루트에 추가하여, 각 자식 노드가 분리 된 하위 트리의 복수로 분할 될 수있다; 개념 : 노드 정도 : 여러 노드가 종속, 트리 정도의 트리의 노드의 최대이다 잎 노드가 자식 노드가 아닌 부모, 부모 노드, 다음 레벨 인 자식 노드, 형제, 같은 아버지 노드 계층 노드 트리 높이 또는 깊이, 큰 층인, "" "
################################################## ######
"" " 둘째, 이진 트리 트리 및 무질서한 나무를 주문했다 만 연구는 이진 트리, 주문 우리 이진 트리? 무엇 1, 이진 트리, 트리가 (노드가 최대 2 포크에서) 더 악화에 비해 2입니다 2 진 트리 구분 : 1, 완전한 바이너리 트리 : 리프 노드가 상기 하부 층 및 최하부 층 이진 트리 노드의 바닥층 한번 발생이 가장 왼쪽 위치의 다수의 층에 집중되어 # 2, 완전한 바이너리 트리 각 계층의 노드 수가 최대에 도달 한 경우 이진 트리가, 다음, 이진 트리 전체 이진 트리입니다 완전 이진 트리가 완전 이진 트리해야하지만 반드시 완전한 이진 트리 전체 이진 트리입니다 # 3, 균형 이진 트리 # 4, 이진 정렬 나무 "" "
################################################## ######
"" " 셋째는, 이진 트리 저장 바이너리 시퀀스 테이블도 저장을 위해 사용 될 수 있지만, 트리 나 체인점의 사용, 두 개의 노드에 연결하는 것입니다 일반적인 장면 트리 응용 프로그램을 HTML은 나무되는 시나리오 나무는 매우이다 이상의 (1), 쇄 저장 A, 체인점 이진 : 이진 트리 노드는 방식과 유사한 목록에서 노드 사이의 링크에 의해 연결된 물체로 정의된다. B, 노드 정의 클래스 BiTreeNode : 는 def __init __ (셀프 데이터) #data 값이 노드에 전달 self.data = 데이터 self.lchild = 없음 self.rchild = 없음 : C, 이진 트리 탐색 의 I, 제 (앞에) 전순은 : 루트 액세스 동작이 발생할 통과하기 전에 왼쪽과 오른쪽 서브 트리를 수행합니다 이진 트리가 비어 있지 않으면, 다시 다음을 수행 : ⑴ 루트 액세스, ⑵ 왼쪽 서브 트리를 통과, ⑶ 바로 하위 트리를 탐색. II, 예약 주문을 : 액세스 루트 노드 . 횡단하는 작업이있는 왼쪽과 오른쪽 서브 트리 (m) 발생 : 이진 트리가 비어 있지 않으면, 다시 다음을 수행 : 특정 작업 ; ⑴ 왼쪽 서브 트리를 통과 ⑵ 액세스 루트 매듭 ; ⑶ 우측 서브 트리를 횡단. III를 postorder 순회 : 루트 노드에 액세스하는 좌우의 서브 트리를 횡단 한 후 발생한다. 이진 트리가 비어 있지 않은 경우, 다시 다음을 수행 : ⑴ 왼쪽 서브 트리를 통과, ⑵ 우측 서브 트리를 통과, ⑶ 루트 액세스를. IV는 이송 레벨 현재 노드를 저장하는 큐의 순회 순서를 달성하기 위해서는 아이에 대해 액세스된다. "" "
#######################에 대한 ################## 이진 트리 탐색 코드
클래스 노드 (객체) :
"" " 노드 클래스 " "" DEF __init__ (자체, ELEM = -1, lchild = 없음, rchild = 없음) : self.elem = ELEM self.lchild = lchild #는 두 아이가 self.rchild = rchild 클래스 트리 ( 객체) : "" " 트리 기반 ", "" DEF __init__ (자체 루트 = 없음) : self.root = 루트 DEF 추가 (자체, ELEM) : "" " 노드 트리를 추가 " "" 노드는 = 노드 (ELEM) #을 나무가, 다음 루트 노드 할당 비어있는 경우 경우== self.root의 없음 : self.root가 = 노드 다른 : 큐 = [] queue.append (self.root) # 이송 기존 노드 레벨을 그동안 큐 : # 종료 조건은 큐가 비어 있다는, # 팝업 큐 제 1 엘리먼트 CUR = queue.pop (0) IF cur.lchild == 없음 : cur.lchild = 노드 창 ELIF cur.rchild == 없음 : cur.rchild = 노드 창 다른 : # 왼쪽과 오른쪽 서브 트리가 비어 있지 않은 경우는, 큐가 추가 판단을 계속 queue.append (cur.lchild) queue.append (cur.rchild) #의 트리 탐색에 #을 ############# ################################################## #### #의 너비 우선 탐색 DEF의 breadth_travel (자기) '' ' 를 사용 큐 구현 트리 계층 탐색 "" " IF self.root == 없음 : 리턴 큐 = [self.root] 그동안 큐 : 노드 = 큐. POP (0) 인쇄 (node.elem) IF! = node.lchild 없음 : queue.append (node.lchild) IF node.rchild! = 없음 : queue.append (node.rchild) # ################## ############################################### # 깊이 우선 통과 # 이 세 가지 방법 # 이 통과 코드가 통제 할 수없는,하지만 우리는 당신이, 당신은, 이진 트리를 그릴 수 있습니다 주문할 수 있어야하며이 추진하고 뒤로 패스가 될 것입니다 # 항상 예약 주문, 루트 우선 약의 DEF의 전순 (자체, 루트) : "" " 재귀 예약 주문 " "" IF 루트 == 없음 : 리턴 인쇄 (root.elem) self.preorder (root.lchild) self.preorder (루트. rchild) #예약 주문 : 왼쪽, 오른쪽, DEF 중위 (자체, 루트) : "" " 재귀 예약 주문 " "" IF 루트 == 없음 : # 이 최종 상태 재귀 반환 self.inorder이 (root.lchild) 인쇄 (root.elem) self.inorder (root.rchild) # 좌우 이후의 탐색, DEF의 postorder (자체 루트) : "" " 재귀 이후의 탐색 " "" IF 루트 == 없음 : 리턴 self.postorder (루트 .lchild) self.postorder (root.rchild) 인쇄 (root.elem) IF __name__ == '__main__ ': 트리 = 트리 () tree.add ( 1 ) tree.add ( 2 ) tree.add ( 3 ) tree.add ( 4 ) tree.add ( 5 ) tree.breadth_travel ()
##############################################
##############################################
##############################################