Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

이진 트리 구현까지 완료 #29

Merged
merged 4 commits into from
Aug 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions yoonexample/src/main/java/tree/binarytree/BinaryTreeNode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package tree.binarytree;

/**
* Tree 자료구조의 ADT, 인터페이스이자 Node의 인터페이스
*
* @param <E> 데이터의 파라미터 타입
* @author dion
*/
public interface BinaryTreeNode<E> {

/**
* 해당 노드에 저장된 데이터를 반환합니다.
*
* @return 저장된 데이터
*/
E getData();

/**
* 해당 노드의 왼쪽 서브트리를 반환합니다.
*
* @return 왼쪽 서브트리
*/
BinaryTreeNode<E> getLeftSubTree();

/**
* 왼쪽 서브트리를 등록합니다.
*
* @param subTree 대상이 될 노드
*/
void setLeftSubTree(BinaryTreeNode<E> subTree);

/**
* 해당 노드의 오른쪽 서브트리를 반환합니다.
*
* @return 오른쪽 서브트리
*/
BinaryTreeNode<E> getRightSubTree();

/**
* 오른쪽 서브트리를 등록합니다.
*
* @param subTree 대상이 될 노드
*/
void setRightSubTree(BinaryTreeNode<E> subTree);
}
37 changes: 37 additions & 0 deletions yoonexample/src/main/java/tree/binarytree/BinaryTreeNodeImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package tree.binarytree;

public class BinaryTreeNodeImpl<E> implements BinaryTreeNode<E> {

private final E data;
private BinaryTreeNode<E> left;
private BinaryTreeNode<E> right;

public BinaryTreeNodeImpl(E data) {
this.data = data;
}

@Override
public E getData() {
return this.data;
}

@Override
public BinaryTreeNode<E> getLeftSubTree() {
return this.left;
}

@Override
public void setLeftSubTree(BinaryTreeNode<E> subTree) {
this.left = subTree;
}

@Override
public BinaryTreeNode<E> getRightSubTree() {
return this.right;
}

@Override
public void setRightSubTree(BinaryTreeNode<E> subTree) {
this.right = subTree;
}
}
46 changes: 46 additions & 0 deletions yoonexample/src/test/java/tree/binarytree/BinaryTreeNodeTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package tree.binarytree;

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

class BinaryTreeNodeTest {

@Test
@DisplayName("이진_트리_생성_및_초기화_테스트")
void 이진_트리_생성_및_초기화_테스트() {
BinaryTreeNode<Integer> bt = new BinaryTreeNodeImpl<>(1);

assertThat(bt).isNotNull();
assertThat(bt.getData()).isEqualTo(1);
assertThat(bt.getLeftSubTree()).isNull();
assertThat(bt.getRightSubTree()).isNull();
}

@Test
@DisplayName("이진_트리_저장_및_출력_테스트")
void 이진_트리_저장_및_출력_테스트() {
BinaryTreeNode<Integer> bt1 = new BinaryTreeNodeImpl<>(1);
BinaryTreeNode<Integer> bt2 = new BinaryTreeNodeImpl<>(2);
BinaryTreeNode<Integer> bt3 = new BinaryTreeNodeImpl<>(3);
BinaryTreeNode<Integer> bt4 = new BinaryTreeNodeImpl<>(4);

bt1.setLeftSubTree(bt2);
bt1.setRightSubTree(bt3);
bt2.setLeftSubTree(bt4);

assertThat(bt1).isNotNull();
assertThat(bt2).isNotNull();
assertThat(bt3).isNotNull();
assertThat(bt4).isNotNull();
assertThat(bt1.getData()).isEqualTo(1);
assertThat(bt2.getData()).isEqualTo(2);
assertThat(bt3.getData()).isEqualTo(3);
assertThat(bt4.getData()).isEqualTo(4);
assertThat(bt1.getLeftSubTree().getData()).isEqualTo(2);
assertThat(bt1.getRightSubTree().getData()).isEqualTo(3);
assertThat(bt1.getLeftSubTree().getLeftSubTree().getData()).isEqualTo(4);
assertThat(bt1.getLeftSubTree().getRightSubTree()).isNull();
}
}