주어진 인덱스가 idx 일 때
( 수정 필요..?)
부모 노드의 인덱스 : idx = (idx / 2) - 1;
왼쪽 자식 노드의 인덱스 : idx = idx * 2 + 1;
오른쪽 자식 노드의 인덱스 : idx = idx * 2 + 2;
- 재귀적으로 호출하여 출력하는 구조 주의 !
- 전위 순회 : 먼저 출력 (preOrder)
- 중위 순회 : 중간에 출력 (inOrder)
- 후위 순회 : 마지막에 출력 (postOrder)
class BinaryTree {
char[] tree;
BinaryTree(char[] arr) {
tree = arr.clone();
}
public void preOrder(int idx) { // 전위 순회
int left = idx * 2 + 1;
int right = idx * 2 + 2;
System.out.print(tree[idx] + " ");
if (left < tree.length) {
preOrder(left);
}
if (right < tree.length) {
preOrder(right);
}
}
public void inOrder(int idx) { // 중위 순회
int left = idx * 2 + 1;
int right = idx * 2 + 2;
if (left < tree.length) {
inOrder(left);
}
System.out.print(tree[idx] + " ");
if (right < tree.length) {
inOrder(right);
}
}
public void postOrder(int idx){ // 후위 순회
int left = idx * 2 + 1;
int right = idx * 2 + 2;
if(left<tree.length){
preOrder(left);
}
if(right<tree.length){
preOrder(right);
}
System.out.print(tree[idx] + " ");
}
public void levelOrder(int idx){ // 레벨 순회
for (int i = idx; i < tree.length; i++) {
System.out.print(tree[i] + " ");
}
}
}
'자료구조 & 알고리즘 > 이진트리' 카테고리의 다른 글
포화이진트리 - 각 가중치 총합을 최소로 만들기 (1) | 2023.12.04 |
---|---|
이진트리 예시 코드 - 연결리스트로 구성하여 전위, 중위, 후위 순회 (0) | 2023.11.29 |
주어진 인덱스가 idx 일 때
( 수정 필요..?)
부모 노드의 인덱스 : idx = (idx / 2) - 1;
왼쪽 자식 노드의 인덱스 : idx = idx * 2 + 1;
오른쪽 자식 노드의 인덱스 : idx = idx * 2 + 2;
- 재귀적으로 호출하여 출력하는 구조 주의 !
- 전위 순회 : 먼저 출력 (preOrder)
- 중위 순회 : 중간에 출력 (inOrder)
- 후위 순회 : 마지막에 출력 (postOrder)
class BinaryTree {
char[] tree;
BinaryTree(char[] arr) {
tree = arr.clone();
}
public void preOrder(int idx) { // 전위 순회
int left = idx * 2 + 1;
int right = idx * 2 + 2;
System.out.print(tree[idx] + " ");
if (left < tree.length) {
preOrder(left);
}
if (right < tree.length) {
preOrder(right);
}
}
public void inOrder(int idx) { // 중위 순회
int left = idx * 2 + 1;
int right = idx * 2 + 2;
if (left < tree.length) {
inOrder(left);
}
System.out.print(tree[idx] + " ");
if (right < tree.length) {
inOrder(right);
}
}
public void postOrder(int idx){ // 후위 순회
int left = idx * 2 + 1;
int right = idx * 2 + 2;
if(left<tree.length){
preOrder(left);
}
if(right<tree.length){
preOrder(right);
}
System.out.print(tree[idx] + " ");
}
public void levelOrder(int idx){ // 레벨 순회
for (int i = idx; i < tree.length; i++) {
System.out.print(tree[i] + " ");
}
}
}
'자료구조 & 알고리즘 > 이진트리' 카테고리의 다른 글
포화이진트리 - 각 가중치 총합을 최소로 만들기 (1) | 2023.12.04 |
---|---|
이진트리 예시 코드 - 연결리스트로 구성하여 전위, 중위, 후위 순회 (0) | 2023.11.29 |