두 갈래 나무의 모든 경로와 회전 그룹

문제 풀이 사고방식: 먼저 현재 노드가 비어 있는지, 비어 있지 않으면 경로에 가입하고, 만약 비어 있지 않으면 이 노드가 잎 노드인지 아닌지를 판단하고, 잎 노드를 위해 경로를 답안에 넣는다. 그렇지 않으면 계속 좌우 트리로 돌아간다.
두 갈래 나무를 정해서 뿌리 노드에서 잎 노드까지의 모든 경로를 되돌려줍니다.
설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다.
예:
입력:
1/\2 3\5
출력: ["1->2->5", "1->3"]
설명: 모든 뿌리 노드에서 잎 노드까지의 경로: 1->2->5, 1->3
class Solution {
    public List binaryTreePaths(TreeNode root) {
        LinkedList paths = new LinkedList<>();
        paths_ans(root,"",paths);
        return paths;
    }
    public void paths_ans(TreeNode root,String path,LinkedList paths){
        if(root != null){
            path += Integer.toString(root.val);
        if(root.left == null && root.right == null){
            paths.add(path);
        }else{
            path += "->";
            paths_ans(root.left,path,paths);
            paths_ans(root.right,path,paths);
        }
    }
    }
}

문제 풀이 사고방식: 먼저 두 개의 정점을 찾아야 한다. 각각 오른쪽 하단과 왼쪽 상단의 점을 찾은 다음에 이 두 개의 좌표를 종지 조건으로 매 바퀴의 원소를 출력해야 한다. 종지 조건은 이 두 개의 대응하는 가로 좌표이다.
문제 설명은 n행 m열의 표에 대해 우리는 나선형으로 표에 순서대로 정수를 기입할 수 있다. 우리는 기입된 표를 나선형 행렬이라고 부른다.예를 들어 4행 5열의 나선 행렬은 다음과 같다.
샘플 입력
4 52 2
샘플 출력
십오
package Test02;
import java.util.Scanner;
public class Work {
public static void main(String[] args) {
    int[][] a = new int[1001][1001];
    int n,m;
    int c,r;
    Scanner reader = new Scanner(System.in);
    n = reader.nextInt();
    m = reader.nextInt();
    c = reader.nextInt();
    r = reader.nextInt();
    int row = 1, col = 1;
    int num = 1;
    int n2 = n, m2 = m;
    while(row <= n && col <= m){
        int x = row, y = col;
        while(col <= m)
            a[row][col++] = num++;
        col--;row++;
        while(row <= n)
            a[row++][col]  = num++;
        row--;col--;
        while(col >= y)
            a[row][col--] = num++;
        row--;col++;
        while(row > x )
            a[row--][col] = num++;
        row++;col++; 
        n--;m--;
    }
    System.out.println(a[r][c]);
}
}

좋은 웹페이지 즐겨찾기