이 진 트 리: 먼저 순차 적 으로 옮 겨 다 니 고 중간 순 서 를 옮 겨 다 니 며 재 귀적 으로 이 루어 집 니 다.
2714 단어 데이터 구조
class Node{
public int value;
public Node left;
public Node right;
public Node(int v){
this.value=v;
this.left=null;
this.right=null;
}
}
이 진 트 리 의 옮 겨 다 니 는 것 은 주로 먼저 옮 겨 다 니 고 중간 순 서 를 옮 겨 다 니 며 뒷 순 서 를 옮 겨 다 니 며 네 가지 방식 이 있 습 니 다. 다음은 하나씩 소개 하 겠 습 니 다.1. 먼저 차례 를 옮 겨 다 니 며 노드 에 대한 방문 작업 은 아들 이 방문 되 기 전에 이 루어 집 니 다.다시 말 하면 먼저 방문 노드 를 옮 겨 다 니 는 순 서 는 뿌리 노드 - 왼쪽 아들 - 오른쪽 아들 이다.나 무 는 재 귀 를 통 해 정의 할 수 있 기 때문에 나무의 흔 한 조작 은 재 귀 로 이 루어 지 는 것 이 편리 하고 뚜렷 하 다.재 귀적 으로 실 현 된 코드 는 다음 과 같다.
재 귀 코드 를 통 해 알 수 있 듯 이 이 재 귀 는 꼬리 재 귀 (꼬리 재 귀 즉 재 귀 형식 은 함수 말미 또는 함수 가 곧 돌아 오기 전에) 이다.마지막 재 귀적 인 재 귀적 호출 은 스 택 으로 호출 된 정 보 를 저장 해 야 하 며 데이터 규모 가 클 때 스 택 공간 을 넘 기 쉽다.현재 대부분의 컴 파일 러 는 자동 으로 꼬리 재 귀 를 제거 할 수 있 지만 그래도 우 리 는 스스로 제거 해도 무방 하 다.비 재 귀적 우선 순위 알고리즘 기본 사고: 스 택 사용
(1). 노드 를 만 나 서 방문 한 다음 에 스 택 을 누 르 고 왼쪽 트 리 를 옮 겨 다 닙 니 다.
(2). 왼쪽 나무 가 옮 겨 다 니 는 것 이 끝 난 후에 스 택 꼭대기 에서 이 노드 를 꺼 내 오른쪽 아들 에 게 가리 키 고 a 절 차 를 계속 합 니 다.
(3). 모든 노드 가 마지막 으로 방문 한 트 리 노드 가 비어 있 을 때 중단 합 니 다.
구현 코드 는 다음 과 같 습 니 다:
class BinaryTreeTraversal {
/**
* @param root
*
*/
public static void preOrderRec(Node root){
if(root!=null){
System.out.println(root.value);
preOrderRec(root.left);
preOrderRec(root.right);
}
}
2. 중간 순 서 를 옮 겨 다 니 는 경로 가 먼저 옮 겨 다 니 는 경로 와 똑 같 습 니 다.그 실현 의 사고방식 도 선착순 과 매우 비슷 하 다.그 주요 한 차이 점 은 방문 노드 의 순서 가 다르다 는 것 이다. 중 서 는 모든 왼쪽 아들 을 방문 한 후에 뿌리 노드 를 방문 하고 마지막 으로 오른쪽 아들, 즉 왼쪽 아들 - 뿌리 노드 - 오른쪽 아들 을 방문 하 는 것 이다.
재 귀적 으로 실 현 된 코드 는 다음 과 같다.
/**
* @param root
*
*/
public static void inOrderRec(Node root){
if(root!=null){
preOrderRec(root.left);
System.out.println(root.value);
preOrderRec(root.right);
}
}
4. 567917. 후 서 는 후 서 를 옮 겨 다 니 고 중 서 를 옮 겨 다 니 며 먼저 옮 겨 다 니 는 경로 도 똑 같 습 니 다.주요 한 차이 점 은 방문 노드 를 옮 겨 다 니 는 순서 가 왼쪽 아들 과 오른쪽 아들 을 먼저 방문 하고 마지막 으로 방문 노드, 즉 왼쪽 아들 - 오른쪽 아들 - 뿌리 노드 이다
순환 실현 사고 와 중 서 를 옮 겨 다 니 는 것 과 선 서 를 옮 겨 다 니 는 것 이 비슷 하 다. 코드 는 다음 과 같다.
/**
* @param root
*
*/
public static void postOrderRec(Node root){
if(root!=null){
preOrderRec(root.left);
preOrderRec(root.right);
System.out.println(root.value);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.