알고리즘

[알고리즘] 트리 순회

narlo 2022. 2. 4. 14:54

백준 1991번 트리순회

 

잊어버리지 않기 위해 남겨두는

import java.util.*;
import java.io.*;

class Node {
    String data;
    Node left;
    Node right;

    Node(String data) {
        this.data = data;
    }
}
public class Main {
    static Node root=null;
    static String result="";

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();

        int n = Integer.parseInt(input);

        for(int i=0;i<n;i++) {
            input = br.readLine();
            String[] s = input.split(" ");

            createNode(s[0], s[1], s[2]);
        }

        preorder(root);
        System.out.println(result);
        result="";

        inorder(root);
        System.out.println(result);
        result="";

        postorder(root);
        System.out.println(result);
    }

    static void createNode(String data, String left, String right) {
        if(root==null) {
            root = new Node(data);
            if(!left.equals(".")) {
                root.left = new Node(left);
            }
            if(!right.equals(".")) {
                root.right = new Node(right);
            }
        } else {
            searchNode(root, data, left, right);
        }
    }

    static void searchNode(Node start, String data, String left, String right) {
        if(start == null) {
            return;
        }
        if(start.data.equals(data)) {
            if(!left.equals(".")) {
                start.left = new Node(left);
            }
            if(!right.equals(".")) {
                start.right = new Node(right);
            }
        } else {
            searchNode(start.left, data, left, right);
            searchNode(start.right, data, left, right);
        }

    }

    static void preorder(Node start) {      //전위순회
        result += start.data;
        if(start.left!=null) {
            preorder(start.left);
        }
        if(start.right!=null) {
            preorder(start.right);
        }
    }

    static void inorder(Node start) {     //중위순회
        if(start.left!=null) {
            inorder(start.left);
        }
        result += start.data;
        if(start.right!=null) {
            inorder(start.right);
        }
    }

    static void postorder(Node start) {    //후위순회
        if(start.left!=null) {
            postorder(start.left);
        }
        if(start.right!=null) {
            postorder(start.right);
        }
        result += start.data;
    }
}

 

'알고리즘' 카테고리의 다른 글

코딩테스트 알고리즘 정리  (0) 2024.12.18