이진트리는 이 블로그 목록 알고리즘-> 완전이진탐색트리를 C로 정의를 해둔 내용있다.
(http://itqomcom.blogspot.com/2016/05/blog-post_31.html)
(http://itqomcom.blogspot.com/2016/05/blog-post_31.html)
해당 내용들을 참고하면서 이해하면 될 것이다.
1. BST_Func 인터페이스 구현 (역할 : 트리의 필요기능 정의)
- package org.java.project.binaryTree;
- public interface BST_Func {
- //1) 루트의 자식인 객체하나를 생성하고 BST_Insert를 호출하여 저장시킴.
- public void BST_Create(BST_Head Tree, int Data);
- //2) 이진트리 전체를 탐색하여 출력함.
- public void BST_Search(BST_Head Tree);
- public void BST_Insert(BST_Head First, BSTNode Child, int Data); // 삽입
- public int BST_Delete(BST_Head TreeNode); // 객체 지우기
- public void BST_Destroy(BST_Head Tree); // 전체제거
- }
2. BinaryTree 클래스 구현 (역할 : 트리의 필요기능 메소드 정의)
- package org.java.project.binaryTree;
- public class BinaryTree implements BST_Func{
- public void BST_Create(BST_Head Tree, int Data) { // 처음생성
- BSTNode ChildNode = new BSTNode(Data);
- System.out.println("InsertChildNode : " + Data);
- BST_Insert(Tree, ChildNode, Data);
- }
- public void BST_Search(BST_Head Tree) {
- if(Tree.count < 1) {
- System.out.println("생성된 트리가 없습니다!");
- System.exit(0);
- }
- if(Tree.left != null) {
- BST_Search(Tree.left);
- }
- System.out.print(Tree.data + " ");
- if(Tree.right != null) {
- BST_Search(Tree.right);
- }
- }
- public void BST_Insert(BST_Head First, BSTNode Child, int Data) {
- if(First.data < Data) { // 현재 노드보다 큰경우
- if(First.right != null)
- BST_Insert(First.right, Child, Data);
- else
- First.right = Child;
- }
- else { // 현재 노드보다 작은경우
- if(First.left != null)
- BST_Insert(First.left, Child, Data);
- else
- First.left = Child;
- }
- }
- public void BST_Destroy(BST_Head Tree) { //이진트리 전체제거
- if(Tree.left != null) {
- BST_Destroy(Tree.left);
- }
- if(Tree.right != null) {
- BST_Destroy(Tree.right);
- }
- int removed = BST_Delete(Tree); //객체를 NULL값으로 만들어버림
- System.out.println(removed + "제거완료!");
- }
- public int BST_Delete(BST_Head TreeNode) { //객체하나 제거
- int Removed = TreeNode.data;
- TreeNode.left = null;
- TreeNode.right = null;
- TreeNode= null;
- return Removed;
- }
- }
3. BST_Head 클래스 구현 (역할 : 루트에 해당하는 트리의 노드)
- package org.java.project.binaryTree;
- public class BST_Head extends BinaryTree{
- public BSTNode left; // 상속시키는 BSTNode클래스 타입 지정 1
- public BSTNode right; // 상속시키는 BSTNode클래스 타입 지정 2
- public int data;
- public static BST_Head Tree;
- public static int count = 0;
- public BST_Head(int data) {
- this.count++;
- this.data = data;
- this.left = null;
- this.right = null;
- }
- }
4. BSTNode 클래스 구현 (역할 : 루트노드의 자식에 해당하는 노드)
- package org.java.project.binaryTree;
- public class BSTNode extends BST_Head{
- public BSTNode(int data) {
- super(data);
- }
- }
5. 메인함수 실행 (역할 : 이진트리를 실행시킴)
package org.java.project.binaryTree;
public class BinaryTreeExecute {
public static void main(String[] args) {
System.out.println("BinarySearchTree\n");
BST_Head Tree = new BST_Head(5);
System.out.println("Tree Root : 5");
Tree.BST_Create(Tree, 4);
Tree.BST_Create(Tree, 6);
Tree.BST_Create(Tree, 10);
Tree.BST_Create(Tree, 2);
Tree.BST_Create(Tree, 7);
Tree.BST_Create(Tree, 3);
System.out.println("\nBST Count : " + Tree.count);
Tree.BST_Search(Tree);
System.out.print("\n\n\n");
System.out.println("Destroy BinaryTree!");
Tree.BST_Destroy(Tree);
}
}
▶ 실행결과
: 루트노드는 BST_Head클래스에서 인스턴스화 하여 구현되고, 트리의 자식 노드들은 BST_Head클래스를 상속받는 BSTNode에서 인스턴스화 되어진다.
댓글 없음:
댓글 쓰기