자바 이 진 트 리 옮 겨 다 니 기 동작 상세 설명[앞 순서,중간 순서,뒤 순서,차원,넓이 우선 옮 겨 다 니 기]

이 글 의 사례 는 자바 이 진 트 리 검색 작업 을 다 루 고 있다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
앞에서 말 했 듯 이 지난 절 에서 우 리 는 나무 와 관련 지식 에 대해 이 해 했 고 이 진 트 리 에 대해 기본 적 인 실현 을 했 습 니 다.다음은 우리 의 이 진 트 리 를 계속 보완 하 겠 습 니 다.
이 진 트 리 에 대해 깊이 있 게 옮 겨 다 니 고 넓 게 옮 겨 다 니 며 깊이 는 앞 순서,중간 순서 와 뒤 순서 세 가지 옮 겨 다 니 는 방법 이 있 습 니 다.넓 게 옮 겨 다 니 는 것 은 우리 가 흔히 말 하 는 차원 입 니 다.그림 과 같 습 니 다.

트 리 의 정의 자체 가 재 귀적 정의 이기 때문에 앞 순서,중간 순서 와 뒤 순서 등 세 가지 가 재 귀적 인 방법 으로 이 루어 집 니 다.넓 은 범위 에 대해 서 는 다른 데이터 구 조 를 선택 하여 이 루어 져 야 합 니 다.이 예 에서 우 리 는 대기 열 을 사용 하여 넓 은 범위 의 우선 순 위 를 실현 합 니 다.
네 가지 기본 적 인 사상 은 다음 과 같다.
앞 순서 옮 겨 다 니 기:뿌리 결산 점--->왼쪽 나무--->오른쪽 나무
왼쪽 하위 트 리 뿌리 결산 점 오른쪽 하위 트 리
뒤 순 옮 겨 다 니 기:왼쪽 나무--->오른쪽 나무--->뿌리 결산 점
차원 옮 겨 다 니 기:위 에서 아래로,왼쪽 에서 오른쪽으로.
예 를 들 어 다음 두 갈래 나무의 여러 가지 옮 겨 다 니 기:

이전 순서: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);
      }
    }
  }
소스 코드 주소
자바 알고리즘 과 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기