LeetCode: 두 갈래 나무를 정하고 이 두 갈래 나무가 밑바닥에서 꼭대기까지의 층계를 훑어보도록 되돌려줍니다.

3053 단어

제목 설명


두 갈래 나무를 정해서 이 두 갈래 나무가 밑바닥에서 꼭대기까지의 층계를 훑어보낸다. (왼쪽에서 오른쪽으로, 잎 노드에서 뿌리 노드까지, 층층이 훑어보낸다)
예:
주어진 두 갈래 나무는 {3,9,20,#,#,15,7},
    3↵   / ↵  9  20↵    /  ↵   15   7

이 두 갈래 나무가 밑바닥에서 꼭대기까지 층층이 훑어본 결과는
[↵  [15,7]↵  [9,20],↵  [3],↵]

"{1,#,2,3}"의 의미를 잘 모르면 계속 읽어주세요
OJ는 다음과 같은 방법으로 두 갈래 트리를 정렬합니다.
두 갈래 나무의 서열화는 층층이 훑어보는 원칙에 따른다. # "이 위치는 하나의 경로의 종결이고 아래에 결점이 더 이상 존재하지 않는다는 것을 대표한다.
예:
   1↵  / ↵ 2   3↵    /↵   4↵    ↵     5

상술한 두 갈래 나무의 서열화 결과는'{1,2,3,#,#,4,#,#,5}'이다.
방법1: 층차적으로 훑어보고 결과 집합에 대해 플러그인 조작을 사용한다
/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
import java.util.*;
 
public class Solution {
    ArrayList> res = new ArrayList>();
    public ArrayList> levelOrderBottom(TreeNode root) {
        if(root == null)
            return res;
        Queue queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            int size = queue.size();
            ArrayList list = new ArrayList();
            for(int i = 0; i < size; i++){
                TreeNode node = queue.poll();
                list.add(node.val);
                if(node.left != null){
                    queue.offer(node.left);
                }
                if(node.right != null){
                    queue.offer(node.right);
                }
            }
            res.add(0, list);
        }
        return res;
    }
}

방법2: 귀속을 이용하여 층차 역행을 실현한다
/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
import java.util.*;

public class Solution {
    ArrayList> res = new ArrayList>();
    public ArrayList> levelOrderBottom(TreeNode root) {
        if(root == null)
            return res;
        Queue queue = new LinkedList<>();
        queue.offer(root);
        levelOrderBottom(queue);
        return res;
    }
    public void levelOrderBottom(Queue queue){
        if(queue.isEmpty())
            return;
        int size = queue.size();
        ArrayList list = new ArrayList();
        for(int i = 0; i < size; i++){
                TreeNode node = (TreeNode)queue.poll();
                list.add(node.val);
                if(node.left != null){
                    queue.offer(node.left);
                }
                if(node.right != null){
                    queue.offer(node.right);
                }
            }
        levelOrderBottom(queue);
         res.add(list);
    }
}

좋은 웹페이지 즐겨찾기