비선형 데이터구조, 트리(Tree) #5 이진 트리의 삽입(Insert)
2021. 9. 24. 09:40ㆍDataStructure
1. 개요
이진 트리의 삽입 기능을 구현합니다. 삽입 시 빈 공간에 삽입을 수행하는데 이 순서는 중위 순회(Inorder Traversal)를 따릅니다. 구현 언어는 자바입니다.
2. 중위 순회(Inorder Traversal)이란 무엇인가?
중위 순회란 왼쪽 서브 트리를 방문 후 루트 노드(Root Node)를 방문하고 마지막으로 오른쪽 서브 트리를 방문하는 순회입니다.
2. 이진 트리 삽입 과정
3. 이진 트리 삽입 구현
import java.util.LinkedList;
import java.util.Queue;
// 이진 트리 삽입 및 삭제 예제
public class BinaryTree
{
public static class Node
{
int key;
Node left, right;
public Node(int key)
{
this.key = key;
left = right = null;
}
}
Node root;
Node temp = root;
// 비어있는 트리
public BinaryTree()
{
root = null;
}
// 생성자
public BinaryTree(int key)
{
root = new Node(key);
}
// 이진 트리의 중위 순회
private void inorder(Node node)
{
if(node==null)
{
return;
}
inorder(node.left);
System.out.print(node.key+" ");
inorder(node.right);
}
// 이진 트리 중복순회 호출
public void inorderTraversal()
{
inorder(this.root);
System.out.println();
}
// 이진 트리에 key값을 노드로 생성하여 삽입
public void insert(int key)
{
if(root==null)
{
root = new Node(key);
return;
}
Queue<Node> q = new LinkedList<Node>();
q.add(root);
// 이진트리의 빈공간을 찾을때까지 level order 순회 수행
while(!q.isEmpty()) {
temp = q.remove();
if(temp.left==null)
{
temp.left = new Node(key);
break;
}
else
{
q.add(temp.left);
}
if(temp.right==null)
{
temp.right = new Node(key);
break;
}
else
{
q.add(temp.right);
}
}
}
}
import org.junit.jupiter.api.Test;
import Tree.BT.Implement.BinaryTree.Node;
class BinaryTreeTest {
@Test
void insertTest() {
BinaryTree bt = new BinaryTree();
bt.insert(10);
bt.insert(11);
bt.insert(7);
bt.insert(9);
bt.insert(15);
bt.insert(8);
System.out.print("삽입이전 중위 순회 : ");
bt.inorderTraversal(); // Expected Output : 9 11 15 10 8 7
int key = 12;
bt.insert(key);
System.out.print("삽입이후 중위 순회 : ");
bt.inorderTraversal(); // Expected Output : 9 11 15 10 8 7 12
}
}
Output
삽입이전 중위 순회 : 9 11 15 10 8 7
삽입이후 중위 순회 : 9 11 15 10 8 7 12
References
source code : https://github.com/yonghwankim-dev/DataStruct
https://www.geeksforgeeks.org/insertion-in-a-binary-tree-in-level-order/
'DataStructure' 카테고리의 다른 글
비선형 데이터구조, 트리(Tree) #7 이진 탐색 트리 탐색(search) 및 추가(add) (0) | 2021.09.24 |
---|---|
비선형 데이터구조, 트리(Tree) #6 이진 트리의 삭제(Delete) (0) | 2021.09.24 |
비선형 데이터구조, 트리(Tree) #3 이진 트리의 종류 (0) | 2021.09.23 |
비선형 데이터구조, 트리(Tree) #2 이진 트리의 특징 (0) | 2021.09.23 |
비선형 데이터구조, 트리(Tree) #1 이진 트리의 소개 (0) | 2021.09.22 |