검지offer의 면접문제 23: 위에서 아래로 두 갈래 나무 프린트
위에서 아래로 두 갈래 나무의 각 노드를 인쇄하고, 같은 층의 노드는 왼쪽에서 오른쪽으로 인쇄합니다.
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;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.