class Node{
int data;
Node left;
Node right;
}
class Tree {
Node root;
void setRoot(Node node) {
this.root = node;
}
Node getRoot() {
return root;
}
Node makeNode(Node left, int data, Node right) {
Node node = new Node();
node.data = data;
node.left = left;
node.right = right;
return node;
}
//순회
void inorder(Node node) {
if (node != null) { // 재귀 호출
inorder(node.left);
System.out.print(node.data + " ");
inorder(node.right);
}
}
void preorder(Node node) {
if (node != null) {
System.out.print(node.data + " ");
preorder(node.left);
preorder(node.right);
}
}
void postorder(Node node) {
if (node != null) {
postorder(node.left);
postorder(node.right);
System.out.print(node.data + " ");
}
}
}
/* 이렇게 생긴 트리를 순회할 것입니다.
(1)
/ \
(2) (3)
/ \
(4) (5)
InOrder (Left, Root, Right) : 4 2 5 1 3
PreOrder (Root, Left, Right) : 1 2 4 5 3
PostOrder (Left,Right, Root) : 4 5 2 3 1
*/
public class Test {
public static void main(String[] args) {
Tree tree = new Tree();
//마지막 노드부터 생성
Node node4 = tree.makeNode(null, 4, null);
Node node5 = tree.makeNode(null, 5, null);
Node node2 = tree.makeNode(node4, 2, node5);
Node node3 = tree.makeNode(null, 3, null);
Node node1 = tree.makeNode(node2, 1, node3);
tree.setRoot(node1);
// 순회 시작
System.out.println("=== InOrder ===");
tree.inorder(tree.getRoot());
System.out.println("\n=== PreOrder ===");
tree.preorder(tree.getRoot());
System.out.println("\n=== PostOrder ===");
tree.postorder(tree.getRoot());
}
}
Node 와 Tree를 간단하게 직접 구현하고 순회하면서 단순하게 data를 출력하는 형식으로 구현했다.
유튜브를 보고 따라 만들어봤다.