2013년 8월 13일 화요일

자바로 구현한 트리의 운행(전위/중위/후위)

트리의 운행중 preOrder, inOrder, postOrder 방식은 다음과 같다. 

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)  
 

inOrder traversal : Left-Root-Right
postOrder traversal : Left-Right-Root
preOrder traversal : Root-Left-Right


/** 트리의 운행 Example
*  전위/중위/후위
*/
import java.util.*;  //for Random Class
class BinaryNode    {   
  int  element;                  // The data in the node
  BinaryNode left;          // Left child
  BinaryNode right;        // Right child

  BinaryNode(int element) { //생성자
  this( element, null, null );
  }
  BinaryNode(int element, BinaryNode left, BinaryNode right){
            this.element  = element;
            this.left    = left;
            this.right    = right;
  }
}

class BinaryTreeTraversal {
//트리 생성
public BinaryNode insert(BinaryNode tree, int n) {
if (tree == null) {
tree = new BinaryNode(n);
tree.right= tree.left=null;
}
else if(n > tree.element) {
tree.right = insert(tree.right,&= null){
System.out.print(tree.element + " ");
preorder(tree.left);
preorder(tree.right);
}
}

//후위운행
public void postorder(BinaryNode tree) {
if (tree != null){
postorder(tree.left);
postorder(tree.right);
System.out.print(tree.element + " ");
}
}

//중위운행
public void inorder(BinaryNode tree) {
if (tree != null){
inorder(tree.left);
System.out.print(tree.element + " ");
inorder(tree.right);
}
}
}

public class BinaryTreeTraversalTest {
public static void main(String[] args){
BinaryNode root = null;
int nansu;
BinaryTreeTraversal tr = new BinaryTreeTraversal(); 

Random r = new Random();
System.out.print("발생된 난수 : " );
for(int i=0; i<5; i++) {
nansu = r.nextInt()%100;
                    System.out.print(nansu + " ");
//항상 root가 반환된다.
root = tr.insert(root, nansu); 
}
       
System.out.print("\nPreorder Traversal : ");
tr.preorder(root);

System.out.print("\nInorder Traversal : ");
tr.inorder(root);

System.out.print("\nPostorder Traversal : ");
tr.postorder(root);

댓글 없음:

댓글 쓰기