자바 이 진 트 리 옮 겨 다 니 기 동작 상세 설명[앞 순서,중간 순서,뒤 순서,차원,넓이 우선 옮 겨 다 니 기]
3325 단어 Java두 갈래 검색 트 리 옮 겨 다 니 기
앞에서 말 했 듯 이 지난 절 에서 우 리 는 나무 와 관련 지식 에 대해 이 해 했 고 이 진 트 리 에 대해 기본 적 인 실현 을 했 습 니 다.다음은 우리 의 이 진 트 리 를 계속 보완 하 겠 습 니 다.
이 진 트 리 에 대해 깊이 있 게 옮 겨 다 니 고 넓 게 옮 겨 다 니 며 깊이 는 앞 순서,중간 순서 와 뒤 순서 세 가지 옮 겨 다 니 는 방법 이 있 습 니 다.넓 게 옮 겨 다 니 는 것 은 우리 가 흔히 말 하 는 차원 입 니 다.그림 과 같 습 니 다.
트 리 의 정의 자체 가 재 귀적 정의 이기 때문에 앞 순서,중간 순서 와 뒤 순서 등 세 가지 가 재 귀적 인 방법 으로 이 루어 집 니 다.넓 은 범위 에 대해 서 는 다른 데이터 구 조 를 선택 하여 이 루어 져 야 합 니 다.이 예 에서 우 리 는 대기 열 을 사용 하여 넓 은 범위 의 우선 순 위 를 실현 합 니 다.
네 가지 기본 적 인 사상 은 다음 과 같다.
앞 순서 옮 겨 다 니 기:뿌리 결산 점--->왼쪽 나무--->오른쪽 나무
왼쪽 하위 트 리 뿌리 결산 점 오른쪽 하위 트 리
뒤 순 옮 겨 다 니 기:왼쪽 나무--->오른쪽 나무--->뿌리 결산 점
차원 옮 겨 다 니 기:위 에서 아래로,왼쪽 에서 오른쪽으로.
예 를 들 어 다음 두 갈래 나무의 여러 가지 옮 겨 다 니 기:
이전 순서:5-3-2-4-6-8
2-3-4-5-6-8
후 순 옮 겨 다 니 기:2-4-3-8-6-5
차원 옮 김:5-3-6-2-4-8
1.앞 순 서 를 옮 겨 다 닌 다.
앞에서 언급 한 사 고 를 바탕 으로 뿌리 결산 점->왼쪽 나무->오른쪽 나무,코드 는 다음 과 같다.
// ( : ---> ---> )
public void preOrder() {
preOrder(root);
}
// node ,
private void preOrder(Node node) {
if (node == null) {
return;
}
System.out.println(node.e);
preOrder(node.left);
preOrder(node.right);
}
2.중 서 를 옮 겨 다 닌 다.앞에서 언급 한 사 고 를 바탕 으로 왼쪽 나무->뿌리 결산 점->오른쪽 나무,코드 는 다음 과 같다.
// ( : ---> ---> )
public void inOrder() {
inOrder(root);
}
// node ,
private void inOrder(Node node) {
if (node == null) {
return;
}
inOrder(node.left);
System.out.println(node.e);
inOrder(node.right);
}
3.후 서 를 옮 겨 다 닌 다.앞에서 언급 한 사 고 를 바탕 으로 왼쪽 나무->오른쪽 나무->뿌리 결산 점,코드 는 다음 과 같다.
// ( : ---> ---> )
public void postOrder() {
postOrder(root);
}
// node ,
private void postOrder(Node node) {
if (node == null) {
return;
}
postOrder(node.left);
postOrder(node.right);
System.out.println(node.e);
}
4.층 차 를 옮 겨 다 닌 다.차원 을 옮 겨 다 니 는 것 에 대해 우 리 는 대열 을 바탕 으로 이 루어 집 니 다.사고방식 은 다음 과 같 습 니 다.
(1)우선 대기 열 에 루트 노드 추가
(2)나머지 임의의 노드 에 대해 대기 열 을 나 갈 때 방문 합 니 다(왼쪽 아이 와 오른쪽 아이 가 비어 있 지 않 은 경우 대기 열 에 들어간다 고 가정 합 니 다)
코드 구현 은 다음 과 같 습 니 다.
// --( )
public void levelOrder() {
Queue<Node> q = new LinkedList<>();
q.add(root);
while (!q.isEmpty()) {
Node cur = q.remove();
System.out.println(cur.e);
if (cur.left != null) {
q.add(cur.left);
}
if (cur.right!=null){
q.add(cur.right);
}
}
}
소스 코드 주소자바 알고리즘 과 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.