검지offer의 면접문제 23: 위에서 아래로 두 갈래 나무 프린트

4090 단어
제목 설명
위에서 아래로 두 갈래 나무의 각 노드를 인쇄하고, 같은 층의 노드는 왼쪽에서 오른쪽으로 인쇄합니다.
 
            8
           /  \           6   10
         / \  / \         5  7 9  11
  8,6,10,5,7,9,11

사고방식: 두 갈래 나무의 차원은 초기화 대열을 반복한다. 결점 8은 대열에 들어가고 결점 8은 대열에 나간다. 8의 아이는 결점이 비어 있지 않다. 8의 아이를 결점 6, 10을 대열에 넣는다.6 출대, 6 의 아이 결점 이 비어 있지 않다. 6 의 아이 결점 5, 7 을 대열 에 넣고, 현재 대열 중 10, 5, 7, 그리고 10 출대,..., 잎 결점 입대, 끝날 때까지.
표로 보여주기:
단계
조작하다
대열

8 입대


8 출대, 8 아이 노드 6, 10 입대
6,10

6 출대, 6 아이 노드 5, 7 입대
10,5,7

10 출대, 10 아이 노드 9, 11 입대
5,7,9,11

5 출대, 아이 노드가 비어 입대 불필요
7,9,11

7 출대, 아이 노드가 비어 입대 불필요
9,11

9 출대, 아이 노드가 비어 입대할 필요가 없다
십일

11 출대, 아이 노드가 비어 입대 불필요
총괄적으로 말하자면 매번 출대할 때마다 결점에 아이가 있으면 그 아이를 결점으로 입대한다.그리고 팀의 첫 번째 원소는 대열을 떠나 대열이 비어 있을 때까지 순환한다.
분석에 따르면 다음과 같은 코드를 작성합니다.
import java.util.ArrayList;
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> list=new ArrayList<Integer>();
        if(root==null)
            return list;
        Queue<TreeNode> queue=new LinkedList<TreeNode>();

        queue.offer(root);
        while(!queue.isEmpty()){
            TreeNode temp=queue.poll();
            list.add(temp.val);
            if(temp.left!=null)
                queue.offer(temp.left);
            if(temp.right!=null)
                queue.offer(temp.right);
        }
        return list;
    }
}

좋은 웹페이지 즐겨찾기