- tree class생성
-
public class BinarySearchTree {
Node head = null;
}
- 트리구조에서 데이터가 저장될 노드 클래스를 생성한다.
-
public class Node {
Node left;
Node right;
int data;
public Node(int data) {
this.data = data;
}
}
- 삽입
-
public void add(int data) {
if(this.head == null) {
this.head = new Node(data);
} else {
Node parentNode = this.head;
while(true) {
if(data < parentNode.data) {
if(parentNode.left != null) {
parentNode = parentNode.left;
} else {
parentNode.left = new Node(data);
break;
}
} else {
if(parentNode.right != null) {
parentNode = parentNode.right;
} else {
parentNode.right = new Node(data);
break;
}
}
}
}
}
- 검색
-
public Node findNode(int data) {
if(this.head == null) {
return null;
} else {
Node parentNode = this.haed;
while(parentNode != null) {
if(parentNode.data == data) {
return parentNode;
} else if(data < parentNode.data) {
parentNode = parentNode.left;
} else {
parentNode = parentNode.right;
}
}
return null;
}
}
- 삭제
-
public Boolean remove(int data) {
Node currParentNode = this.head;
Node currNode = this.head;
if (this.head == null) {
return false;
} else {
if (this.head.value == value && this.head.left == null && this.head.right == null) {
this.head = null;
return true;
}
while (currNode != null) {
if (currNode.value == value) {
searched = true;
break;
} else if (value < currNode.value) {
currParentNode = currNode;
currNode = currNode.left;
} else {
currParentNode = currNode;
currNode = currNode.right;
}
}
if (searched == false) {
return false;
}
}
if (currNode.left == null && currNode.right == null) {
if (value < currParentNode.value) {
currParentNode.left = null;
currNode = null;
} else {
currParentNode.right = null;
currNode = null;
}
return true;
} else if (currNode.left != null && currNode.right == null) {
if (value < currParentNode.value) {
currParentNode.left = currNode.left;
currNode = null;
} else {
currParentNode.right = currNode.left;
currNode = null;
}
return true;
} else if (currNode.left == null && currNode.right != null) {
if (value < currParentNode.value) {
currParentNode.left = currNode.right;
currNode = null;
} else {
currParentNode.right = currNode.right;
currNode = null;
}
return true;
} else {
if (value < currParentNode.value) {
Node changeNode = currNode.right;
Node changeParentNode = currNode.right;
while (currNode.left != null) {
changeParentNode = currNode;
changeNode = currNode.left;
}
if (changeNode.right != null) {
changeParentNode.left = changeNode.right;
} else {
changeParentNode.left = null;
}
changeNode.right = currNode.right;
changeNode.left = currNode.left;
currNode = null;
} else {
Node changeNode = currNode.right;
Node changeParentNode = currNode.right;
while (changeNode.left != null) {
changeParentNode = changeNode;
changeNode = changeNode.left;
}
if (changeNode.right != null) {
changeParentNode.left = changeNode.right;
} else {
changeParentNode.left = null;
}
currParentNode.right = changeNode;
changeNode.right = currNode.right;
changeNode.left = currNode.left;
currNode = null;
}
return true;
}
}