Tree에서 데이터를 가져오는 방법인 Incorder, Preorder, Postorder 구현
package Category;
class Node { // 이진트리의 노드는 data와 왼쪽 오른쪽 2개의 자식노드로 구성
int data;
Node left;
Node right;
}
class Tree {
public Node root;
public void setRoot(Node node) {
root = node;
}
public Node getRoot() {
return root;
}
public Node makeNode(Node left, int data, Node right) { // 새로운 노드 추가하는 메서드
Node node = new Node();
node.data = data;
node.left = left;
node.right = right;
return node;
}
public void inorder(Node node) {
if (node != null) { // 새로운 노드를 만들 때 Node타입으로 객체를 생성하고 그 객체의 주소를 참조변수 node에 넣는다. 그러므로 node가 null이라는 것은 만든 노드가 없다는 거를 의미한다.
// 즉 이 코드에서 n1, n2, n3, n4, n5의 참조변수가 inorder의 매개변수로 오지 않으면 다 null이다.
inorder(node.left);
System.out.println(node.data);
inorder(node.right);
}
}
public void preorder(Node node) {
if (node != null) {
System.out.println(node.data);
preorder(node.left);
preorder(node.right);
}
}
public void postorder(Node node) {
if (node != null) {
postorder(node.left);
postorder(node.right);
System.out.println(node.data);
}
}
}
public class Test {
public static void main(String[] args) {
Tree t = new Tree();
Node n4 = t.makeNode(null, 4, null);
Node n5 = t.makeNode(null, 5, null);
Node n2 = t.makeNode(n4, 2, n5);
Node n3 = t.makeNode(null, 3, null);
Node n1 = t.makeNode(n2, 1, n3);
t.setRoot(n1);
System.out.println("inorder 결과");
t.inorder(t.getRoot());
System.out.println("preorder 결과");
t.preorder(t.getRoot());
System.out.println("postorder 결과");
t.postorder(t.getRoot());
}
}
밑에 결과가 맞는지 보다 편하게 확인하기 위해 코드에서 생성한 트리를 그림으로 그려보았다.
inorder 결과
5
6
13
10
11
preorder 결과
10
6
5
13
11
postorder 결과
5
13
6
11
10