삽입 할때 만들어 둔 Tree 클래스에 preorder 함수 , inorder 함수 postorder 함수 를 추가 해줄것입니다.
public class Tree {
public Node rootNode=null;
public void addNode(int value){
// root 값이 없는 경우
if(rootNode==null){
Node n=new Node();
n.setValue(value);
rootNode=n;
}else{// root 값이 있는경우
addNode(value , rootNode );
}
}
public void addNode(int value , Node rootNode){
// root 값보다 작은 경우
if(rootNode.getValue()>value){
// root의 왼쪽 노드가 없는경우
if(rootNode.getLeftNode()==null){
Node n = new Node();
n.setValue(value);
rootNode.setLeftNode(n);
}
else {// root의 왼쪽노드가 있는경우
addNode(value, rootNode.getLeftNode()); // 다시 이함수를 호출해서 더 깊이 들어가는 부분이고 root는 root의 왼쪽 노드
}
}else{//root 값보다 큰경우
// root의 오른쪽 노드가 없는 경우
if(rootNode.getRightNode()==null){
Node n = new Node();
n.setValue(value);
rootNode.setRightNode(n);
}
else{// root의 오른쪽 노드가 있는경우 더 깊이 들어가야한다
addNode(value, rootNode.getRightNode());
}
}
}
// preorder 쪽 Root 부터 왼쪽 모든 노드 탐색 후 오른쪽 ( root , left , right)
public void preorder(Node rootNode){
if(rootNode==null){
return ;
}
System.out.println(rootNode.value);
preorder(rootNode.leftNode);
preorder(rootNode.rightNode);
}
//inorder 쪽 맨 왼쪽 아래노드 부터 Root , 오른쪽 (left , root , right)
public void inorder(Node rootNode){
if( rootNode==null){
return;
}
inorder(rootNode.leftNode);
System.out.println(rootNode.value);
inorder(rootNode.rightNode);
}
//맨 왼쪽 아래노드 부터 오른쪽 탐색 후 Root (left , right , root)
public void postorder(Node rootNode){// 이렇게 하면 널포인트 에러가 날거같은데
if(rootNode == null ){
return;
}
postorder(rootNode.leftNode);
postorder(rootNode.rightNode);
System.out.println(rootNode.value);
}
public static void main(String[] args) {
Tree t = new Tree();
t.addNode(24);
t.addNode(15);
t.addNode(19);
t.addNode(2);
t.addNode(28);
t.addNode(27);
t.addNode(30);
System.out.print("preorder:");
t.preorder(t.rootNode);
System.out.print("inorder:");
t.inorder(t.rootNode);
System.out.print("postorder:");
t.postorder(t.rootNode);
}
}
결과값
PreOrder : 24 15 2 19 28 27 30 InOrder : 2 15 19 24 27 28 30 PostOrder : 2 19 15 27 30 28 24