-
[자료구조] binary tree(이진트리)Data Structure 2022. 10. 1. 15:23
1) concept
binary tree는 이진트리라고 하며,
tree의 속성에서 자식 노드를 최대 2개로 제한한 트리이다. (자식 노드가 0개여도, 이진트리이다.)
(+) 공집합도 이진트리인 이유
루트 노드를 중심으로 두 개의 서브 트리(큰 트리에 속하는 작은 트리)로 나뉘어 진다. 또한 나뉘어진 두 서브 트리도 모두 이진 트리어야 한다.
위는 이진트리를 재귀적 정의로 표현한 것인데, 공집합도 이진트리여야 이는 성립된다. 재귀적으로 조건을 확인해갔을 때, leaf node 에 다다랐을 때, 정의가 만족되기 때문이다. 자연스럽게 노드가 하나 뿐인 것도 이진 트리 정의에 만족하게 된다.
2) 이진트리의 종류
full binary tree(정이진 트리), complete binary tree(완전 이진트리), balanced binary tree(균형이진트리) 등
3) 이진트리를 코드 상에서 저장하는 방식
- 리스트 : level 0 에서부터 차례대로 내려가면서 왼쪽부터 저장
- 재귀 + 리스트
- 노드 클래스
class Tree { //tree의 constructor를 생성 : tree의 자식 노드들을 엘리먼트로 담을 children 배열로 선언 constructor(value) { this.value = value; this.children = []; } // 자식 노드 생성 메소드 구현 : new 키워드로 자식 노드를 생성 한 후, children 배열에 push insertNode(value) { const childNode = new Tree(value); this.children.push(childNode); } // tree에서 value값을 탐색하기 위한 메소드 구현 contains(value) { // 현재 노드의 value 값이 찾는 값과 일치한다면 true 반환 if (this.value === value) { return true; } // 자식 노드에서 value값을 탐색하기 위해 반복문과 재귀패턴 사용 for (let childNode of this.children) { if (childNode.contains(value)) { return true; } } // 조건에 해당하지 않으면 false 반환 return false; } }
4) 이진트리의 순회 연산
(1) 전위순회
자기 자신 → 왼쪽 → 오른쪽
BinaryTree.prototype.traversePreOrder = function(){ traversePreOrderHelper(this._root); function traversePreOrderHelper(node) { if(!node){ return; } console.log(node.value); // 루트값 접근 이후에 왼쪽, 오른쪽 traversePreOrderHelper(node.left); traversePreOrderHelper(node.right) } }
(2) 중위 순회
왼쪽 → 자기 자신 → 오른쪽
BinaryTree.prototype.traverseInOrder = function(){ traverseInOrderHelper(this._root); function traverseInOrderHelper(noe){ if(!node) return; // 종료조건 traverseInOrderHelper(node.left); console.log(node.value); traverseInOrderHelper(node.right); } }
(3) 후위 순위
왼쪽 → 오른쪽 → 자기 자신
BinaryTree.prototype.traversePostOrder = function(){ traverseInOrderHelper(this._root); function traverseInOrderHelper(noe){ if(!node) return; // 종료조건 traverseInOrderHelper(node.left); traverseInOrderHelper(node.right); console.log(node.value); } }
'Data Structure' 카테고리의 다른 글
[자료구조] graph (0) 2022.10.08 [자료구조] Tree (0) 2022.09.24 [자료구조] Queue (0) 2022.09.24 [자료구조] Stack (0) 2022.09.17